型チェックしたい(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もあります。

リファレンス