python環境構築

流れ
- Poetryのインストールと仮想環境の構築
- Jupyterのインストールと実行
- Pylanceの型チェックを有効にする
- Ruffの設定
- pre-commitの設定

Poetryとは
Pythonの依存関係管理とパッケージ管理を扱うツール(nodeのnpmと似てる)
他にもパッケージの公開なども行えたり高機能
Poetryは仮想環境(venv)を作成してそこに各ライブラリのインストールを行うのでローカル環境を汚さない
pipとvenvでも同じようなことはできるがrequirements.txtへの追加忘れなどがおきそうなのでこっちの方がよさそう
Poetryのインストール
brew install poetry
プロジェクト作成
poetry init
デフォルトだと~/.cache/pypoetry/virtualenvsに仮想環境が構築されてしまうのでプロジェクト直下に作成されるように設定
poetry config --local virtualenvs.in-project true
numpyとmatplotlibをプロジェクトの依存関係として追加
poetry add numpy matplotlib
仮想環境のシェルに入る
poetry shell
numpyとmatplotlibが存在するか確認
pip3 list
抜ける
exit
VSCodeの設定
拡張機能を入れる
VSCodeでCmd+shift+Pでコマンドパレットを開く
Python Select Interpreter
で.venv:poetryを選択する
これでimportする際にVScodeが仮想環境から探すようになる
実行する
main.pyを作成
touch main.py
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.show()
poetry runを使うと仮想環境内で直接スクリプトを実行できる
便利
poetry run python3 main.py
実行結果
code runnerと組合せる
"code-runner.executorMap": {
"python": "poetry run python3 -u",
}
エイリアス作成
毎回poetryと打つのがめんどくさいのでエイリアスを作成
alias po='poetry'
再読みこみ
source ~/.zshrc

jupyterの拡張機能を入れる
main.ipynbを作成
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.show()
表示

pylance(内部的にはpyright)の型チェックを有効にする
strictでもいいが少し厳しすぎる気がするので個人的にはstandardでもいい気がする
{
"python.analysis.typeCheckingMode": "standard",
}
コードを少し変更
エラーが出る

venvの仕組みに関してやっていて気になったので調べたらいい感じの記事が

ruffを設定する
ruffはrust製のlinter,formatter
インストール
brew install ruff
拡張機能を入れる
pyproject.tomlに追記
[tool.ruff]
extend-include = ["*.ipynb"]
[tool.ruff.lint]
select = ["ALL"]
settings.jsonに追記
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
"source.organizeImports": "explicit"
}
},
"notebook.formatOnSave.enabled": true,
"notebook.codeActionsOnSave": {
"notebook.source.fixAll": "explicit",
"notebook.source.organizeImports": "explicit"
},
保存した時にフォーマットとリンターのコードアクションが実行される

pre-commit
コミット前にコードに対してチェックやタスクを実行できるフレームワーク
例: リント,フォーマット,テスト
今回はコミット前にruffのリントとフォーマットを走らせ問題がないかチェックする
インストール
brew install pre-commi
pre-commit-config.yamlを作成する
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.4.3
hooks:
# Run the linter.
- id: ruff
files: '\.(py|ipynb)$'
# Run the formatter.
- id: ruff-format
files: '\.(py|ipynb)$'
参考
pre-commit install
VSCodeのソース管理からリポジトリをセットアップする
セットアップ後コミットしようとするとエラーが出る
src/main.py:16:5: T201 `print` found
src/main.py:17:5: T201 `print` found
Found 2 errors.
エラーを解決したらpushする
鍵登録してない人はgithub cliを使うと楽に認証できる
参考記事