プロジェクト用に mypy 型チェックを設定しようとしています。まずは一連のファイル/ディレクトリを除外して、少なくとも新しいコードで型チェックが通るようにし、その後、除外リストを徐々に減らしていきたいと考えています。残念ながら、mypy は除外構成を無視しており、その理由がわかりません。
mypy.ini
次の内容の設定ファイルを作成しました:
[mypy]
python_version = 3.8
exclude = /examples/
しかし、 を実行するとmypy --verbose .
、そのディレクトリ内のファイルに対して依然としてエラーが検出されます。ログ メッセージによると、除外設定は認識されているものの、無視されているようです。
LOG: Mypy Version: 0.812
LOG: Config File: mypy.ini
LOG: Configured Executable: /Library/Developer/CommandLineTools/usr/bin/python
3
LOG: Current Executable: /Library/Developer/CommandLineTools/usr/bin/python
3
LOG: Cache Dir: .mypy_cache
LOG: Compiled: True
LOG: Exclude: /examples/
<snipped>
LOG: Found source: BuildSource(path='./examples/fib.py', module='fib', has_text=False, base_dir='/Users/user/a/examples')
LOG: Found source: BuildSource(path='./examples/fib_iter.py', module='fib_iter', has_text=False, base_dir='/Users/user/a/examples')
<snipped>
examples/fib.py: error: Duplicate module named 'fib' (also at './examples/a/fib.py')
examples/fib.py: note: Are you missing an __init__.py? Alternatively, consider using --exclude to avoid checking one of them.
Found 1 error in 1 file (errors prevented further checking)
除外設定が機能しないのはなぜですか?
ベストアンサー1
私の場合、フォルダーを正しく除外していたにもかかわらず、mypy が有効になっている別のパッケージにインポートされていたため、mypy は引き続きフォルダーをチェックしていました。
除外したいフォルダ(これもパッケージ)の名前が だとします。これを除外するには、ファイルexamples
に次のコードを追加する必要があります。mypy.ini
[mypy]
python_version = 3.8
exclude = examples/
しかし、フォルダーをインポートする別のパッケージ (mypy がチェックできるもの) があったため、これだけでは mypy によるチェックを防ぐのに十分ではありませんでしたexamples
。
follow_imports = silent
したがって、この問題を解決するには、mypy.ini ファイルでも次のように設定する必要がありました。
[mypy-examples.*]
follow_imports = skip
examples
これにより、コードベースの他の場所でパッケージがインポートされていることが判明した場合は、mypy にパッケージの型チェックをスキップするように指示します。