Python プロジェクトにisort, mypy, flake8を追加

Python のプロジェクトに isort, mypy, flake8 を追加します。

  • OS: Xubuntu
  • Python: 3.10.x
  • Shell: zsh

前回の続きです。
まずは仮想環境を有効にします。

1
. venv/bin/activate

1. isort

isortを追加します。

公式ページ

仮想環境が有効な状態で以下のコマンドを入力します。

1
poetry add --group dev isort

これでpyproject.tomlファイルの[tool.poetry.group.dev.dependencies]isortが追加されます。

python_my_app/main.pyを以下の内容に変更します。

1
2
3
4
5
6
7
import os
import logging

import pendulum

now_in_paris = pendulum.now("Europe/Paris")
print(now_in_paris)

前回追加したblackisortが競合することがあります。これを回避するためにpyproject.tomlに以下の内容を追記します。
公式ページ

1
2
[tool.isort]
profile = "black"

isortでフォーマットしてみます。

1
poetry run isort .

main.pyがフォーマットされます。import loggingimport osの順番がソートされました。

2. mypy

公式ページ

mypyを追加します。

1
poetry add --group dev mypy

python_my_app/main.pyを以下の内容に変更します。

1
2
3
4
5
6
7
8
9
10
import logging
import os

import pendulum

now_in_paris = pendulum.now("Europe/Paris")
print(now_in_paris)

number = input("What is your favorite number?")
print("It is", number + 1)

mypyでチェックしてみます。

1
poetry run mypy .
1
python_my_app/main.py:10: error: Unsupported operand types for + ("str" and "int")  [operator]

末尾に出力されている[operator]がエラーコードです。これは、error_codesあたりを探せば内容を確認できます。

なお、mypyの設定はpyproject.tomlファイルに書きます。

公式ページ

以下は設定例です。

1
2
3
[tool.mypy]
ignore_missing_imports = true
namespace_packages = true

3. flake8

公式ページ

flake8を追加します。

1
poetry add --group dev flake8

setup.cfgファイルをpyproject.tomlと同じ階層に作成し以下の内容で保存します。

1
2
3
4
5
6
[flake8]
max-line-length = 88
exclude =
.git,
__pycache__,
venv,

flake8でチェックします。

1
poetry run flake8 .

以下のような結果となります。

1
2
./python_my_app/main.py:1:1: F401 'logging' imported but unused
./python_my_app/main.py:2:1: F401 'os' imported but unused

エラーの理由については、flake8 のエラーコードや pycodestyle のエラーコードを参照します。

以上です。