Python Rye+Black+Flake8+pytest+Mypy+Pylance+GitHub ActionsによるVS Codeの開発環境構築
Rye (Package Manager)
rye init
でプロジェクトを作成する。Pythonのバージョンはrye pin
で指定しておく。
これ以降、依存関係はrye add --dev
で追加し、rye sync
で環境を同期させる。
Black (Formatter)
rye add --dev black
Blackのフォーマットの設定をpyproject.toml
に追加する。以下はデフォルトの行の長さが短いので120に変更している。
[tool.black]
line-length = 120
実行は以下のコマンド。
black ./src/
VS Codeでは.vscode/settings.json
に以下を追加することで保存時にフォーマットされる。
{
"editor.formatOnSave": true,
"python.formatting.blackArgs": [],
"python.formatting.provider": "black",
}
isort (Formatter)
import
のソート用。
rye add --dev isort
isortのフォーマットの設定をpyproject.toml
に追加する。Blackに設定を合わせる。
[tool.isort]
line_length = 120
multi_line_output = 3
include_trailing_comma = true
use_parentheses = true
実行は以下のコマンド。
isort ./src/
VS Codeでは.vscode/settings.json
に以下を追加することで保存時にソートされる。
{
"editor.codeActionsOnSave": {
// isort
"source.organizeImports": true
},
}
Flake8 (Linter)
rye add --dev flake8
プロジェクトのルートに.flake8
を作成する。以下のignore
とmax-line-length
はBlackとの共存のために必須。他は好みで設定。
pyproject-flake8を使うことでpyproject.toml
に設定を書けるが今回は使用しない。
[flake8]
ignore = ["E203", "E501", "W503", "W504"]
max-line-length = 120
実行は以下のコマンド。
flake8 ./src/
VS Codeでは.vscode/settings.json
に以下を追加することでFlake8が有効化される。
{
"python.linting.enabled": true,
"python.linting.flake8Enabled": true,
"python.linting.flake8Args": [],
"python.linting.lintOnSave": true,
"python.linting.pylintEnabled": false,
}
flake8-annotations
関数の型アノテーションの確認用。
rye add --dev flake8-annotations
pep8-naming
命名規則の確認用。
rye add --dev pep8-naming
Mypy (Type Checker)
型チェック用。Pylanceで使われているPyrightはこれだけnpmから入れる必要があり管理が煩わしいので、CLIではPyPIで入るこちらを使う。
rye add --dev mypy
実行は以下のコマンド。
mypy ./src/
Pylance (Language Server)
補完や型チェックなど用。VS Codeから使う。
VS Codeでは.vscode/settings.json
に以下を追加することでPylanceが有効化される。
{
"python.languageServer": "Pylance",
"python.analysis.typeCheckingMode": "basic" // 厳しくしたい場合はstrict
}
pytest (Testing Framework)
テスト用。
rye add --dev pytest
実行は以下のコマンド。
pytest ./tests/
VS Codeでは.vscode/settings.json
に以下を追加することでテストを実行できる。
{
"python.testing.pytestArgs": ["tests"], // ./tests/にテストファイルを入れる
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true,
}
VS Code
以下の拡張機能を入れる。
{
"recommendations": [
"ms-python.python",
"ms-python.vscode-pylance",
"njpwerner.autodocstring"
]
}
Python
Pylance
autoDocstring - Python Docstring Generator
Docstringの生成用。
Python Project
フォーマットやリントやテストを簡単に行えるようにpyproject.toml
にスクリプトを追加する。
test
がpython -m pytest
なのはimport src.xxx
をできるようにするため。
[tool.rye.scripts]
format = { chain = ["black src", "isort src"] }
lint = { chain = ["black --check src", "isort -c -v src", "flake8 src", "mypy src"] }
test = { chain = ["python -m pytest tests"] }
実行にはrye run
を使用する。
GitHub Actions
Pull Requestを開いた際にLintとTestを行うため、以下の.github/workflows/check-pull-request.yml
を作成する。
初回のみcargo install
に時間がかかるが2回目からは高速に動く。
name: Check Pull Request
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
check-pull-request:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ github.head_ref }}
- name: Install Rye
uses: baptiste0928/cargo-install@v2
with:
crate: rye
git: https://github.com/mitsuhiko/rye
branch: main
- name: Install Dependencies
run: rye sync
- name: Lint
run: rye run lint
- name: Test
run: rye run test
Dependabot
WIP
Migration to Python Tools Extensions
非推奨になる設定は削除して各拡張機能を導入する。