mypy が除外したファイルをチェックするのはなぜですか? 質問する

mypy が除外したファイルをチェックするのはなぜですか? 質問する

プロジェクト用に 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 にパッケージの型チェックをスキップするように指示します。

おすすめ記事