Open7

python環境構築

Beyond ToyamaBeyond Toyama

流れ

  1. Poetryのインストールと仮想環境の構築
  2. Jupyterのインストールと実行
  3. Pylanceの型チェックを有効にする
  4. Ruffの設定
  5. pre-commitの設定
Beyond ToyamaBeyond Toyama

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の設定

拡張機能を入れる
https://marketplace.visualstudio.com/items?itemName=ms-python.python

VSCodeでCmd+shift+Pでコマンドパレットを開く
Python Select Interpreter
で.venv:poetryを選択する
これでimportする際にVScodeが仮想環境から探すようになる

実行する

main.pyを作成

touch main.py
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と組合せる

https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner

.vscode/settings.json
  "code-runner.executorMap": {
    "python": "poetry run python3 -u",
  }

エイリアス作成

毎回poetryと打つのがめんどくさいのでエイリアスを作成

.zshrc
alias po='poetry'

再読みこみ

source ~/.zshrc
Beyond ToyamaBeyond Toyama

pylance(内部的にはpyright)の型チェックを有効にする
strictでもいいが少し厳しすぎる気がするので個人的にはstandardでもいい気がする

.vscode/settings.json
{
  "python.analysis.typeCheckingMode": "standard",
}

コードを少し変更
エラーが出る

Beyond ToyamaBeyond Toyama

ruffを設定する

ruffはrust製のlinter,formatter

インストール

brew install ruff

拡張機能を入れる
https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff

pyproject.tomlに追記

[tool.ruff]
extend-include = ["*.ipynb"]
[tool.ruff.lint]
select = ["ALL"]

settings.jsonに追記

.vscode/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"
  },

保存した時にフォーマットとリンターのコードアクションが実行される

Beyond ToyamaBeyond Toyama

pre-commit

コミット前にコードに対してチェックやタスクを実行できるフレームワーク
例: リント,フォーマット,テスト

今回はコミット前にruffのリントとフォーマットを走らせ問題がないかチェックする

インストール

brew install pre-commi

pre-commit-config.yamlを作成する

.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)$'

参考
https://docs.astral.sh/ruff/integrations/#pre-commit

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を使うと楽に認証できる

参考記事
https://zenn.dev/lovegraph/articles/529fe37caa3f19