Skip to content

Collection of awesome Python types, stubs, plugins, and tools to work with them.

License

Notifications You must be signed in to change notification settings

typeddjango/awesome-python-typing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Awesome Python Typing Awesome Gitter

Collection of awesome Python types, stubs, plugins, and tools to work with them.

Contents

Full list of typed projects on PyPi is here.

Static type checkers

  • basedmypy - Based static typing with baseline functionality.
  • basedpyright - Pyright fork with improvements to VSCode support and various other fixes.
  • mypy - Optional static typing (PEP 484).
  • pyanalyze - Extensible static analyzer and type checker.
  • pycharm - IDE for Professional Developers.
  • pylyzer - A fast static code analyzer & language server for Python, written in Rust.
  • pyre - Performant type-checker.
  • pyright - Fast type checker meant for large Python source bases. It can run in a “watch” mode and performs fast incremental updates when files are modified.
  • pytype - Tool to check and infer types - without requiring type annotations.

Dynamic type checkers

  • beartype - Unbearably fast O(1) runtime type-checking in pure Python.
  • pydantic - Data parsing using Python type hinting. Supports dataclasses.
  • pytypes - Provides a rich set of utilities for runtime typechecking.
  • strongtyping - Decorator which checks whether the function is called with the correct type of parameters.
  • typedpy - Type-safe, strict Python. Works well with standard Python.
  • typeguard - Another one runtime type checker.
  • typical - Data parsing and automatic type-coercion using type hinting. Supports dataclasses, standard classes, function signatures, and more.
  • trycast - Parse JSON-like values whose shape is defined by typed dictionaries (TypedDicts) and other standard Python type hints.

Stub packages

Additional types

  • meiga - Simple, typed and monad-based Result type.
  • option - Rust like Option and Result types.
  • optype - Opinionated collections.abc and operators alternative: Flexible single-method protocols and typed operators with predictable names.
  • phantom-types - Phantom types.
  • returns - Make your functions return something meaningful, typed, and safe.
  • safetywrap - Fully typesafe, Rust-like Result and Option types.
  • typet - Length-bounded types, dynamic object validation.
  • useful-types - Collection of useful protocols and type aliases.

Backports and improvements

  • future-typing - Backport for type hinting generics in standard collections and union types as X | Y.
  • typing-extensions - Backported and experimental type hints.
  • typing-utils - Backport 3.8+ runtime typing utils(for eg: get_origin) & add issubtype & more.

Tools

Linters

  • flake8-annotations-complexity - Plugin for flake8 to validate annotations complexity.
  • flake8-annotations - Plugin for flake8 to check for presence of type annotations in function definitions.
  • flake8-pyi - Plugin for Flake8 that provides specializations for type hinting stub files.
  • flake8-type-checking - Plugin to help you guard any type-annotation-only import correctly.
  • flake8-typing-imports - Plugin which checks that typing imports are properly guarded.
  • flake8-typing-only-imports - flake8 plugin that helps identify which imports to put into type-checking blocks, and how to adjust your type annotations once imports are moved.
  • flake8-type-ignore - flake8 plugin to disallow type: ignore comments in your typed Python code.
  • wemake-python-styleguide - The strictest and most opinionated Python linter ever.
  • Ruff - Extremely fast linter which supports lint rules from many other lint tools, such as flake8.

Testing

Working with types

  • com2ann - Tool for translation of type comments to type annotations.
  • merge-pyi - Part of pytype toolchain, applies stub files onto source code.