以下の内容はhttps://bakkyalo.hatenablog.jp/entry/2023/12/11/142702より取得しました。


Python Tips

Python を使用する上での自分用メモ書き。

スクレイピングはこっち。
bakkyalo.hatenablog.jp

主な環境

最初の注意

python3python (Windows なら py も) はすべて別物であることを意識しておく必要がある。

本記事で出てくる pipvenvPython のバージョン毎に付随するものなので、慣れるまではコマンド冒頭の python3 -m 等は省略しない方が良いと個人的には思う。
特に -m が付く項目では

python3 --version

pip --version

等で現在の環境のバージョンを注意深く把握すること。

pyenv

Python 自体のバージョン管理システム

基本的に (この記事の以下の記述を含め) README に全部書いてある。

Ubuntu に pyenv を入れる

README に従う。

curl https://pyenv.run | bash

すると

WARNING: seems you still have not added 'pyenv' to the load path.

等と出ると思うので、その下に書いてある通りに行動する。

例えば以下

# Load pyenv automatically by appending
# the following to
# ~/.bash_profile if it exists, otherwise ~/.profile (for login shells)
# and ~/.bashrc (for interactive shells) :

export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

# Restart your shell for the changes to take effect.

# Load pyenv-virtualenv automatically by adding
# the following to ~/.bashrc:

eval "$(pyenv virtualenv-init -)"

Windows に pyenv を入れる

README にあるように、PowerShell を使うのが楽

Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"

管理者権限のない場合は事前に以下を打つ必要がある (ちなみにこれが何なのか私は理解してない)

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

諸コマンド

  • pyenv で利用可能な version 一覧
pyenv install -l

もしくは

pyenv install --list
pyenv install 3.12.3
  • Python 3.12.3 を使うと宣言する (venv を作る前にやる)
pyenv global 3.12.3  # ログイン中アカウント全体
pyenv local 3.12.3   # current directory のみ
pyenv shell 3.12.3   # current session のみ

pyenv で環境を作ると .python-version というファイルが生成され、python というコマンドでそのバージョンの Python が使用できるようになる

  • インストール済み Python の version 一覧
pyenv versions
  • 現在の環境における Python の version
pyenv version

仮想環境関連

Python はモジュール間の依存関係が強い言語なので (要出典)、プロジェクト毎に環境を固めておきたくなるのは自然な発想である。Docker でコンテナ化してしまうもよし、conda で管理するもよし、Python 標準機能だけで管理するもよし。最終的には設計方針や趣味の範疇である。

この辺の話は
Pythonの開発環境の3つの観点をおさえよう
等を読むと良い。

conda

  • Python 3.12.3 で環境を作る
conda create -n "something_amazing_environment" python=3.12.3
  • 環境に入る
conda activate [something_amazing_environment]
  • 今ある環境の確認
conda info
  • 今いる環境のパッケージの確認
conda list
  • インストール
conda install -c conda-forge ~~~
  • 終わり際
conda deactivate

venv

Python3 標準の仮想環境ツール *1
docs.python.org

Windows なら Python3 に同封されているが、Ubuntu では分離されているので別途入れないといけない。


エラーメッセージ例

$ python3 -m venv .something_amazing_environment
The virtual environment was not created successfully because ensurepip is not
available.  On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.

    apt install python3.10-venv

You may need to use sudo with that command.  After installing the python3-venv
package, recreate your virtual environment.

そこで

sudo apt install python3-venv

より正確にするなら

sudo apt install python3.12-venv

等とする。

諸コマンド
  • 環境を作る

事前に python3 の version を確認しておく。そして

python3 -m venv .[something_amazing_environment]

これで現在の python3 のバージョンにおける仮想環境ができる (仮想環境名の冒頭に . を付けるかどうかは慣習というよりかは趣味な気がする。)。後から Python のバージョンを変更するには一度消し直さないといけないので、仮想環境を作るときはバージョンに細心の注意を払うようにする。

より正確に

python3.12 -m venv .[something_amazing_environment]

等と打つこともできるし、python3 のバージョンの変更を前述の pyenv で行うこともできる。

  • 仮想環境に入る
. .[something_amazing_environment]/bin/activate      # Linux
.\[something_amazing_environment]\Scripts\activate   # Windows

Linux の方の最初の .source の事。

  • 終わり際
deactivate

pip

Python 標準のパッケージ管理システム
pip.pypa.io
packaging.python.org
Windows であれば Python3 に最初から同封されているが、Ubuntu では別途入れる必要がある

sudo apt install python3-pip

可能な限りグローバルを汚さないように venv 等で作った仮想環境内で pip install するようにしたい。

諸コマンド

  • 毎回やるやつ
python3 -m pip install --upgrade pip
  • requirements.txt

吐き出す

python3 -m pip freeze > requirements.txt

飲み込む

python3 -m pip install -r requirements.txt

VSCode 関連

ここでは (WSL 側ではなく) Windows 側に VSCode が入っているものとする。

ターミナルから Anaconda Prompt を動かす

以下は Miniconda の場合。Anaconda の人は適宜読み替えてください。方法は主に 3 つ。

(方法1) 先に VSCodeインタプリタを選択しておく

そうするとターミナルを開くたびにその環境が activate されているはず。

Microsoft 純正の Python 拡張機能が必要。

(方法2) ショートカット通りに打つ

VSCode のターミナルで Command Prompt (PowerShell ではない) を開いて以下のように打つ。*2

cmd

%windir%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -NoExit -Command "& '%userprofile%\miniconda3\shell\condabin\conda-hook.ps1' ; conda activate '%userprofile%\miniconda3' "

まったくを以ってどうでも良いですが、妙なこだわりがあって cmd ではなく PowerShell から打ちたい場合は %windir% の代わりに ${env:windir} を、%userprofile% の代わりに ${env:userprofile} を使ってください。

powershell -ExecutionPolicy ByPass -NoExit -Command "& '${env:userprofile}\miniconda3\shell\condabin\conda-hook.ps1' ; conda activate '${env:userprofile}\miniconda3' "



(方法3) settings.json に追記する

Ctrl + , で設定を開き、terminal integrated profiles windows と検索、settings.json"terminal.integrated.profiles.windows"{} 内に以下のように追記する

settings.json

        "Anaconda Powershell Prompt (miniconda3)": {
            "source": "PowerShell",
            "icon": "terminal-powershell",
            "args": [
                "-ExecutionPolicy",
                "ByPass",
                "-NoExit",
                "-Command",
                "${env:USERPROFILE}\\miniconda3\\shell\\condabin\\conda-hook.ps1",
                "; conda activate ${env:USERPROFILE}\\miniconda3"
            ]
        },

これを入れておくと cmd からコマンドを打たずとも「プロファイルの起動」に「Anaconda Powershell Prompt (miniconda3)」が追加され、最初から (base) 環境で conda が activate された PowerShell が起動するようになる。

Like this


ただし、settings.json の仕様はやたら変更されるので、この方法はあんまりよくないかもしれない。*3

FYI:
Terminal Profiles



インポート "~~~" を解決できませんでした

まずはその import する module がどこにあるかを把握する。

python -c "import ~~~; print('\n'.join(~~~.__path__))"

大体 [module名].__path__ でその場所を返してくれる。 [module名].__file__, sys.path かもしれない。

なんなら pip show ~~~ でも良い。

$ pip show ~~~

で、それを VSCode の settings.json に追記する。

"python.analysis.extraPaths": [
	"[さっきのコマンドで返ってきたパスをここに書く]",
],

docstring 関連

マウスカーソルを関数などの上にかざした時に出る説明を作る。
いくつかスタイルがある

  • Google スタイル
  • NumPy/SciPy スタイル
  • reStructuredText (reST) スタイル
  • Epytext スタイル

[Python] docstringのスタイルと書き方 #コーディング規約 - Qiita

Matplotlib 関連

subplots 時に colorbar でグラフが圧縮されないようにする

pcolormesh に colorbar をつけると、その分だけ図がへこんでしまい、例えば上下で横軸が共通するグラフを並べた際に縦に揃わなくなってしまう。

そんな時は plt.subplotslayout='constrained' を指定する。

すると、文字が被らないように指定する

import matplotlib.pyplot as plt

plt.tight_layout()

と衝突するが、これを外しても求めているグラフが得られてハッピー。

JSON 関連

読み込み

import json
with open('./path/to/input.json') as f:
    data = json.load(f)

# 辞書 data を使う処理

書き込み

import json

# 辞書 data を作る処理

with open('./path/to/output.json', 'w') as f:
    json.dump(data, f, indent=4)

*1:Python2 系や Python3.2 以前では venv が使えないので、代わりに virtualenv を使います。venv の対応は 3.3 からで、特に 3.5 からは公式によるサポートになっているので、3.5 以降で仮想環境を作る際は venv の使用が推奨されるようです。 → 公式 document

*2:これはスタートメニューにある Anaconda Powershell Prompt (miniconda3) のリンク先をそのまま書いています。プロパティからリンク先を見られるので念のため確認してください。

*3:一昔前は 「terminal.integrated.profiles.windows」ではなく「terminal.integrated.shell.windows」でした。




以上の内容はhttps://bakkyalo.hatenablog.jp/entry/2023/12/11/142702より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14