LoginSignup
22
8

More than 1 year has passed since last update.

flake8の設定をpyproject.tomlに統合する

Last updated at Posted at 2021-07-09

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の設定を追加します。

pyproject.toml
...

[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で書くと、

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行を足します。

settings.json
{
...
    "python.linting.enabled": true,
    "python.linting.flake8Enabled": true,
    "python.linting.flake8Path": "<ここにpflake8のパス>",
...

}

python.linting.flake8Path にはインストールしたpflake8のパスを指定してください。

たとえばPoetry + pyenvな環境の場合、パッケージはプロジェクト内の.venvフォルダー下で管理されることが多いと思いますので、以下のような設定になります。

settings.json
{
...
    "python.linting.enabled": true,
    "python.linting.flake8Enabled": true,
    "python.linting.flake8Path": ".venv/bin/pflake8",
...

}

おわりに

flake8の設定をpyproject.tomlから読み込む方法を説明しました。

2022/01/27追記

pyproject-flake8のアイディア をパクった にインスパイアされた pyproject-autoflake というパッケージを作りました。

22
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
8