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のような値をパース。
スタブパッケージ
- asgiref - ASGI仕様、ASGIサーバー向けの asgiref.typing モジュールに型アノテーションを提供。
- boto3-stubs - boto3 のスタブ。
- botostubs - どのIDEでも、boto3 APIのすべてに対してコード補完を提供。
- celery-types - Celery および関連パッケージ django-celery-results, ampq, kombu, billiard, vine および ephem の型スタブ。
- django-stubs - Django のスタブ。
- djangorestframework-stubs - DRF のスタブ。
- grpc-stubs - grpc のスタブ。
- lxml-stubs - lxml のスタブ。
- PyQt5-stubs - PyQt5 のスタブ。
- python-phonenumbers-stubs - phonenumbers のスタブ。
- pythonista-stubs - Pythonista のスタブファイル。
- scipy-stubs - SciPy のスタブファイル。
- sqlalchemy-stubs - SQLAlchemy のスタブファイル。
- sqlalchemy2-stubs - SQLAlchemy の公式スタブおよび mypy プラグイン。
- torchtyping - PyTorch 用の強化型注釈。
- types-aiobotocore - aiobotocore のスタブファイル。
- typeshed - 静的型を持つライブラリスタブのコレクション。
追加の型
- meiga - シンプルで型付きかつモナドベースの Result 型。
- option - Rust 風の Option および Result 型。
- optype - 独自方針を持つ
collections.abcとoperatorsの代替。予測可能な名前を持つ柔軟な単一メソッドプロトコルと型付き演算子を提供します。 - 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プラグイン
- kubernetes-typed - Kubernetes CRD の型チェックに必要なプラグイン。
- loguru-mypy - loguru のサポートに必要なプラグイン。
- mypy-zope - zope.interface のサポートに必要なプラグイン。
- mypy/plugins - すでにmypyへ統合されたプラグイン。
- NumPy - NumPy のサポートに必要なプラグイン。
- pynamodb-mypy - PynamoDB のサポートに必要なプラグイン。
- pydantic - Pydanticに対するプラグイン
連携
- emacs-flycheck-mypy - EmacsにおけるMypyの統合
- mypy-playground - mypy用のオンラインプレーヤー
- mypy-pycharm-plugin - PyCharmにおけるMypyの統合
- pylance - VSCodeにおけるPyRightの統合
- vim-mypy - VimにおけるMypyの統合
- nbQA - Jupyterノートブックでの型チェックツール(例: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 - 明示的な型エイリアス
サードパーティ記事
- 1-minute guide to real constants in Python -
Final定数と継承に関する完全なチュートリアル - Simple dependent types in Python -
Literal型に関する完全なチュートリアル - Testing mypy stubs, plugins, and types - mypy型のテストに関する完全なチュートリアル
- Our journey to type checking 4 million lines of Python - Dropboxはこの規模でのPython静的型チェックを導入した最初の企業の一つである
- PyTest MonkeyType Introduction - 既存のPython DjangoコードベースにType Annotateを適用する:MonkeyType
- The state of type hints in Python - 2018年5月時点での情報です。
- Type hints cheat sheet - MyPyチームが提供する型注釈の書く手順のチェックシート。
- Typechecking Django and DRF - Djangoにおける型チェックについての完全なチュートリアル。
- Type Check Your Django Application - Djangoに型チェックを追加するための2つの最近の講演に基づく記事。
- typing -
typingモジュールの公式Pythonドキュメント。 - Python-typing-koans - Pythonにおけるオプションの静的型付けを学ぶための例集。
- Python Type Checking (Guide) - このガイドでは、Pythonの型チェックについて詳しく紹介します。
- Adding type hints to urllib3 - テストだけでは不十分:urllib3に型ヒントを追加するケーススタディ。
- Adam Johnsons Blog - Adam Johnsonが型付けの実践についてブログ記事を書いている。
- ParamSpec Guide - 新しくリリースされた
PEP612の機能により、関数とその署名に対して多くの高度な型付けが可能になります。 - Static Typing Python Decorators - Pythonにおける正確な静的型付けデコレーターは、厄介な業務です。ラッパー関数が、ラップされた関数のパラメータと返り値の型を静的に決定するために必要な型情報を隠蔽します。
- How do mypy, Pyright, and ty compare? - 3つの主要なPython静的型チェックツールの詳細な比較(機能、パフォーマンス、トレードオフを含む)。
- ty: A Complete Guide - Astralから提供される高速Python型チェックツールtyに関する包括的なガイド。
関連項目
- awesome-python - 素晴らしいPythonフレームワーク、ライブラリ、ソフトウェア、リソースを厳選したリスト。
- Python Developer Tooling Handbook - Python型チェックツール、リントツール、開発ツールに関する包括的なハンドブック。mypy、Pyright、tyについての参照ページも含まれています。
- python-typecheckers - Python型チェックツールの一覧:静的および実行時。