型チェックしたい(mypy)
$ mypy ファイル名
$ mypy ディレクトリ名
# 多数のオプションあり
$ mypy --ignore-missing-imports ファイル名
mypyで、ファイル(やディレクトリ内のファイル)に対して、静的型チェックできます。
厳密な型チェックを通過させるのはとても難しいので、
オプションや設定ファイルで調整して使うのが一般的です。
インストールしたい(mypy)
pipxでインストール
$ pipx install mypy
poetryでインストール
$ poetry add mypy --group test
uvでインストール
$ uv tool install mypy
$ mypy --version
mypy 2.3.1 (compiled: yes)
設定ファイルしたい(pyproject.toml)
mypyの設定はpyproject.tomlの[tool.mypy]セクションで変更できます。
1[tool.mypy]
2strict = true
注意
mypy.iniなどの独立した設定ファイルでは[mypy]セクションを使いますが、
pyproject.tomlにまとめる場合は[tool.mypy]にする必要があります。
[mypy]と書いてしまうと、設定が無視されたまま静かに動いてしまうので注意してください。
注釈
mypy.ini、.mypy.ini、setup.cfgも利用できますが、
最近はpyproject.tomlにまとめるのが主流です。
厳密チェックしたい(mypy --strict)
$ mypy --strict ファイル名
--strictオプションは、以下のオプションをまとめて有効にするショートカットです。
--disallow-any-generics--disallow-subclassing-any--disallow-untyped-calls--disallow-untyped-defs--disallow-incomplete-defs--check-untyped-defs--disallow-untyped-decorators--warn-redundant-casts--warn-unused-ignores--warn-return-any--no-implicit-reexport--strict-equality--extra-checks
厳密チェックを通過させるのはとても難しいので、
--strictをベースに、必要なオプションだけを[tool.mypy]で無効化して調整するのが現実的です。
py.typedしたい
py.typedは配布したパッケージが型対応していることを示すためのファイルです。
自作パッケージの場合__init__.pyと同じ階層に空ファイルとして作成します。
PEP561で定義されていて、mypyやpyrightなどの型チェッカーが、パッケージの型を正しく認識できるようになります。
注釈
partialと書くpy.typedは、自作パッケージ全般ではなく、
型スタブだけを別配布する「スタブオンリーパッケージ」向けの規則です。
一部の型情報が欠けているスタブパッケージであることを示すために使います。
参考
Astral(uvやruffと同じ開発元)製の型チェッカーtyもあります。