tl;dr
- pyproject-flake8 を導入する
- vscodeのflake8のパスには pflake8 (pyproject-flake8についてくるflake8のラッパー)を指定する
はじめに:flake8はpyrproject.tomlに対応していない
最近はPEP 518に従い、 pyproject.toml
ファイルで設定を管理できるPythonツールが増えてきました。
しかしflake8はpyproject.tomlに対応していません。
この記事ではflake8の設定をpyproject.tomlで管理する方法を説明します。
また、エディターにVisual Studio Code(以降vscode)を使ったときにうまく動作する方法についても説明します。
pyproject-flake8を使えばpyproject.tomlで管理できる
解決方法:pyproject-flake8を使う
有志が作ったpyproject-flake8を使えばpyproject.tomlで管理できるようになります。
pyproject-flake8はflake8のラッパーツールで、flake8の代わりにpflake8というコマンドを実行することで、pyproject.tomlからflake8の設定を読み込んでくれます。
pyproject-flake8のインストール
# pipの場合
pip install pyproject-flake8
# poetryの場合
poetry add -D pyproject-flake8
pyproject.tomlへのflake8の設定の追加
つぎにpyproject.tomlにflake8の設定を追加します。
...
[tool.flake8]
max-line-length = 88
extend-ignore = "E203,"
max-complexity = 10
...
.flake8
から移行される方はセクション名が [flake8]
ではなく、 [tool.flake8]
になっていることに注意してください。
指定できる設定ですが、flake8のCLI実行時のオプション名がそのまま指定できます。
例えばflake8では --max-doc-length 1000
のようにdocの最大長を指定できるオプションがありますが、これをpyproject.tomlで書くと、
[tool.flake8]
...
max-doc-length = 1000
のようになります。
Full Listing of Options and Their Descriptions を参考に追加してみてください。
vscodeにpflake8のパスを指定する
さて、ここまででpyproject-flake8のセットアップは完了しましたが、このままではvscode上では有効になりません。
前述のとおり、pyproject-flake8はflake8のラッパーであるpflake8コマンドを実行することで動作します。
よってvscodeがpflake8コマンドを認識するようにしなければなりません。
vscodeで Code -> 基本設定 -> 設定
を開き、右上あたりにあるアイコン「設定(JSON)を開く」を押してvscodeの設定を開くか、あるいはプロジェクト内でvscode設定を管理されている方は .vscode/settings.json
を開きます。
そして以下の3行を足します。
{
...
"python.linting.enabled": true,
"python.linting.flake8Enabled": true,
"python.linting.flake8Path": "<ここにpflake8のパス>",
...
}
python.linting.flake8Path
にはインストールしたpflake8のパスを指定してください。
たとえばPoetry + pyenvな環境の場合、パッケージはプロジェクト内の.venv
フォルダー下で管理されることが多いと思いますので、以下のような設定になります。
{
...
"python.linting.enabled": true,
"python.linting.flake8Enabled": true,
"python.linting.flake8Path": ".venv/bin/pflake8",
...
}
おわりに
flake8の設定をpyproject.tomlから読み込む方法を説明しました。
2022/01/27追記
pyproject-flake8のアイディア をパクった にインスパイアされた pyproject-autoflake というパッケージを作りました。