このページの内容

Awesome Python Typing

Python Typingを扱う資料や関連プロジェクトをまとめたAwesomeリストです。

目次

PyPIにある型付きプロジェクトの全一覧はこちらです。

静的型チェッカー

  • basedmypy - ベースライン機能を備えた静的型付け。
  • basedpyright - VSCodeのサポートやその他の改善を含むPyrightのフォーク。
  • mypy - オプションの静的型付け(PEP 484)。
  • pyanalyze - 拡張可能な静的分析器および型チェック器。
  • PyCharm - プロフェッショナル開発者向けのIDE。
  • pylyzer - Rustで書かれたPython用の高速静的コード分析器および言語サーバー。
  • pyrefly - Python用の高速型チェック器および言語サーバー。
  • pyright - 大規模Pythonソースベース向けの高速型チェック器。ファイルが変更された際に、迅速にインクリメンタル更新を行う「ウォッチ」モードをサポート。
  • pycroscope - Pythonコード向けの半静的型チェッカー。検査対象モジュールをインポートするため、ほかの型チェッカーが拒否する多くの動的構文をpycroscopeが理解できます。コードと直接やり取りするプラグインでpycroscopeを拡張できます。
  • pytype - 型のチェックおよび推論を行うツール(型アノテーションを必要としない)。
  • ty - Ruffおよびuvの開発者によるRustで書かれた極めて高速なPython型チェック器。
  • zuban - Mypyと互換性のあるPython型チェック器および言語サーバー(Rustで構築)。

動的型チェッカー

  • beartype - 純粋Pythonによる、極めて高速なO(1)ランタイム型チェック。
  • pydantic - Python型ヒントを使用したデータ解析。データクラスをサポート。
  • pytypes - ランタイム型チェックに必要な豊かなユーティリティを提供。
  • strongtyping - 関数が正しい型のパラメータで呼び出されているかをチェックするデコレーター
  • typedpy - 型安全かつ厳密なPython。標準Pythonと良好に連携。
  • typeguard - もう一つの実行時型チェックツール
  • typical - 型ヒントを使用したデータパーサーと自動型変換。データクラス、標準クラス、関数署名などに対応。
  • trycast - 型付き辞書(TypedDict)およびその他の標準Python型ヒントで定義された形状を持つJSONのような値をパース。

スタブパッケージ

追加の型

  • meiga - シンプルで型付きかつモナドベースの Result 型。
  • option - Rust 風の Option および Result 型。
  • optype - 独自方針を持つ collections.abcoperators の代替。予測可能な名前を持つ柔軟な単一メソッドプロトコルと型付き演算子を提供します。
  • phantom-types - ファントム型(Phantom types)。
  • returns - 関数の返り値を意味のある、型付き、安全なものにします。
  • safetywrap - 完全に型安全な、Rust 風の Result および Option 型。
  • typet - 長さ制限付き型と動的オブジェクトの検証。
  • useful-types - 有用なプロトコルと型エイリアスのコレクション。

バックポートと改善

  • future-typing - 標準コレクションやユニオン型における型ヒントのジェネリクス向けのバックポートとして X | Yを提供。
  • typing-extensions - バックポートされた実験的型ヒント。
  • typing-utils - 3.8以降のランタイム型ツール(例:get_origin)のバックポートおよびissubtypeの追加など。

ツール

Linter

  • flake8-annotations-complexity - flake8向けのアノテーションの複雑性を検証するプラグイン。
  • flake8-annotations - flake8向けのプラグインで、関数定義に型アノテーションが存在するかをチェック。
  • flake8-pyi - flake8向けのプラグインで、型ヒント用のスタブファイルに特別化を提供。
  • flake8-type-checking - 型アノテーションのみのインポートを正しく保護するためのプラグイン。
  • flake8-typing-imports - 型のインポートが適切に保護されているかをチェックするプラグイン。
  • flake8-typing-only-imports - 型チェックブロックにどのインポートを配置すべきか、およびインポートを移動した後の型アノテーションを調整するためのflake8プラグイン。
  • flake8-type-ignore - 型付きPythonコードで type: ignore コメントを禁止するflake8プラグイン。
  • wemake-python-styleguide - 非常に厳格で独自方針の強いPython linter。
  • Ruff - 非常に高速なlinterで、flake8など多数のlinterから取り入れたルールをサポート。

テスト

  • mypy-test - mypyのプラグイン、スタブ、カスタム型をテスト。
  • pytest-mypy-plugins - mypyの型、スタブ、プラグインをテストするPytestプラグイン。
  • pytest-mypy-testing - mypyの静的型解析をテストするPytestプラグイン。
  • pytest-mypy - Pytest用のMypy静的型チェックプラグイン

型を扱う

  • com2ann - 型コメントを型アノテーションに変換するツール
  • merge-pyi - pytypeツールチェーンの一部で、ソースコードにスタブファイルを適用する
  • mypy-baseline - 既存コードベースとMypyを統合するCLIツールで、既存の型エラーは除外し、新たに発生したエラーのみを報告
  • mypy-protobuf - protobufからMypyスタブを生成するツール
  • mypy-silent - Mypyを無効にするためにコードコメントを追加または削除する
  • mypyc - Mypyでアノテートされた静的型のPythonモジュールをCPython C拡張にコンパイルする
  • retype - コードにスタブを適用する別のツール
  • typeforce - Python環境に型アノテーションを豊かにし、Mypyを強化するCLIツール
  • typesplainer - Pythonの型を説明するツール
  • typing-inspect - typing_inspectモジュールは、typingモジュールで定義された型を実行時で検査するための実験的APIを定義する
  • typing-json - 型付きオブジェクトとJSONを扱うためのライブラリ

既存コードへアノテーションを追加する補助ツール

  • autotyping - 関数にbool、None、Optionalなどのシンプルな返却型アノテーションを自動的に追加する
  • infer-types - Pythonコードに型アノテーションを自動的に推論・追加するCLIツール
  • jsonschema-gentypes - JSONスキーマからTypedDictをもとにPython型を生成する
  • monkeytype - 関数の引数と返却値の実行時型を収集し、その型に基づいて自動的にスタブファイルを生成するか、あるいはコードにドラフト型アノテーションを直接追加できる。
  • no_implicit_optional - 暗黙的なオプショナル型ヒント PEP 484 に適合するためのコード変更ツール。
  • pyannotate - 実行時における呼び出し引数と返却型に基づいてソースコードにアノテーションを挿入する。
  • PyTypes - Pythonのトレースを用いて型を推論する。
  • pytest-annotate - pytest用のPyannotateプラグイン。
  • pytest-monkeytype - pytest用のMonkeyTypeプラグイン。
  • pytype annotate-ast - ASTのノードにPython型をアノテーションするための進行中のツール。
  • RightTyper - 関数の引数と返却値の型を生成するツール。RightTyperは、メモリ消費がほとんどなく、ほぼ全速力でコードを実行できる。
  • auto-optional - デフォルト引数が None の場合、型付き引数をオプショナルにする。

Mypyプラグイン

連携

記事

PEP

  • PEP-3107 - 関数アノテーション
  • PEP-482 - 型ヒントに関する文献概要
  • PEP-483 - 型ヒントの理論
  • PEP-484 - 型ヒント
  • PEP-526 - 変数アノテーションの構文
  • PEP-544 - プロトコル:構造的サブタイプ(静的ダックタイピング)
  • PEP-557 - データクラス
  • PEP-560 - 型定義モジュールおよびジェネリックタイプの基本的なサポート
  • PEP-561 - 型の配布とパッケージ化情報
  • PEP-563 - アノテーションの遅延評価
  • PEP-585 - 標準コレクションにおける型ヒントのジェネリクス
  • PEP-586 - リテラル型
  • PEP-589 - TypedDict: キーが固定された辞書に対する型ヒント
  • PEP-591 - typing に final クオリファイアを追加
  • PEP-593 - 柔軟な関数と変数のアノテーション
  • PEP-604 - Union[] に対する補完的な構文
  • PEP-612 - パラメータ指定変数
  • PEP-613 - 明示的な型エイリアス

サードパーティ記事

関連項目

  • awesome-python - 素晴らしいPythonフレームワーク、ライブラリ、ソフトウェア、リソースを厳選したリスト。
  • Python Developer Tooling Handbook - Python型チェックツール、リントツール、開発ツールに関する包括的なハンドブック。mypyPyrighttyについての参照ページも含まれています。
  • python-typecheckers - Python型チェックツールの一覧:静的および実行時。