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

Overview

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

  • mypy - Optional static typing (PEP 484).
  • pyanalyze - Extensible static analyzer and type checker.
  • pycharm - IDE for Professional Developers.
  • 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.
  • typeguard - Another one runtime type checker.
  • typical - Data parsing and automatic type-coercion using type hinting. Supports dataclasses, standard classes, function signatures, and more.

Stub packages

Additional types

  • meiga - Simple, typed and monad-based Result type.
  • option - Rust like Option and Result types.
  • 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.

Backports and improvements

  • typed-ast - Modified fork of CPython's ast module that parses # type: comments.
  • typing-extensions - Backported and experimental type hints.
  • typing-utils - Backport 3.8+ runtime typing utils(for eg: get_origin) & add issubtype & more.
  • typingplus - Backport support, dynamic is_instance and cast for abstract types.

Tools

Linters

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.
  • mypy-protobuf - Tool to generate mypy stubs from protobufs.
  • mypy-silent - Silence mypy by adding or removing code comments.
  • mypyc - Compiles mypy-annotated, statically typed Python modules into CPython C extensions.
  • retype - Another tool to apply stubs to code.
  • pep585-upgrade - Pre-commit hook configured to automatically upgrade your type hints to the new native types implemented in PEP 585.
  • typing-inspect - The typing_inspect module defines experimental API for runtime inspection of types defined in the typing module.
  • typing-json - Lib for working with typed objects and JSON.

Helper tools to add annotations to existing code

  • autotyper - Automatically add simple return type annotations for functions (bool, None, Optional).
  • monkeytype - Collects runtime types of function arguments and return values, and can automatically generate stub files or even add draft type annotations directly to your code based on the types collected at runtime.
  • pyannotate - Insert annotations into your source code based on call arguments and return types observed at runtime.
  • pyre infer - Pyre has a powerful feature for migrating codebases to a typed format. The infer command-line option ingests a file or directory, makes educated guesses about the types used, and applies the annotations to the files.
  • pytest-annotate - Pyannotate plugin for pytest.
  • pytest-monkeytype - MonkeyType plugin for pytest.
  • pytype annotate-ast - A work-in-progress tool to annotate the nodes of an AST with their Python types.
  • type4py - Deep Similarity Learning-Based Type Inference.
  • typilus - A deep learning algorithm for predicting types in Python. Also available as a GitHub action

Mypy plugins

Integrations

Articles

PEPs

  • PEP-3107 - Function Annotations.
  • PEP-482 - Literature Overview for Type Hints.
  • PEP-483 - The Theory of Type Hints.
  • PEP-484 - Type Hints.
  • PEP-526 - Syntax for Variable Annotations.
  • PEP-544 - Protocols: Structural subtyping (static duck typing).
  • PEP-557 - Data Classes.
  • PEP-560 - Core support for typing module and generic types.
  • PEP-561 - Distributing and Packaging Type Information.
  • PEP-563 - Postponed Evaluation of Annotations.
  • PEP-585 - Type Hinting Generics In Standard Collections.
  • PEP-586 - Literal Types.
  • PEP-589 - TypedDict: Type Hints for Dictionaries with a Fixed Set of Keys.
  • PEP-591 - Adding a final qualifier to typing.
  • PEP-593 - Flexible function and variable annotations.
  • PEP-604 - Complementary syntax for Union[].
  • PEP-612 - Parameter Specification Variables.
  • PEP-613 - Explicit Type Aliases.

Third-party articles

Communities

Related

  • awesome-python - Curated list of awesome Python frameworks, libraries, software and resources.
  • python-typecheckers - List of Python type checkers: static and runtime.
Owner
TypedDjango
We make types for Django framework!
TypedDjango
The strictest and most opinionated python linter ever!

wemake-python-styleguide Welcome to the strictest and most opinionated python linter ever. wemake-python-styleguide is actually a flake8 plugin with s

wemake.services 2.1k Jan 01, 2023
Backport Python 3.8+ typing utils & add issubtype & more

typing-utils Backport Python3.8+ typing utils & issubtype & more Install API issubtype get_origin get_args get_type_hints Install pip install typi

10 Nov 09, 2022
Tool to automatically fix some issues reported by flake8 (forked from autoflake).

autoflake8 Introduction autoflake8 removes unused imports and unused variables from Python code. It makes use of pyflakes to do this. autoflake8 also

francisco souza 27 Sep 08, 2022
A simple plugin that allows running mypy from PyCharm and navigate between errors

mypy-PyCharm-plugin The plugin provides a simple terminal to run fast mypy daemon from PyCharm with a single click or hotkey and easily navigate throu

Dropbox 301 Dec 09, 2022
Utilities for refactoring imports in python-like syntax.

aspy.refactor_imports Utilities for refactoring imports in python-like syntax. Installation pip install aspy.refactor_imports Examples aspy.refactor_i

Anthony Sottile 20 Nov 01, 2022
Flake8 extension to provide force-check option

flake8-force Flake8 extension to provide force-check option. When this option is enabled, flake8 performs all checks even if the target file cannot be

Kenichi Maehashi 9 Oct 29, 2022
Tool to check the completeness of MANIFEST.in for Python packages

check-manifest Are you a Python developer? Have you uploaded packages to the Python Package Index? Have you accidentally uploaded broken packages with

Marius Gedminas 270 Dec 26, 2022
A plugin for Flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycodestyle.

flake8-bugbear A plugin for Flake8 finding likely bugs and design problems in your program. Contains warnings that don't belong in pyflakes and pycode

Python Code Quality Authority 869 Dec 30, 2022
Collection of awesome Python types, stubs, plugins, and tools to work with them.

Awesome Python Typing Collection of awesome Python types, stubs, plugins, and tools to work with them. Contents Static type checkers Dynamic type chec

TypedDjango 1.2k Jan 04, 2023
❄️ A flake8 plugin to help you write better list/set/dict comprehensions.

flake8-comprehensions A flake8 plugin that helps you write better list/set/dict comprehensions. Requirements Python 3.6 to 3.9 supported. Installation

Adam Johnson 398 Dec 23, 2022
An enhanced version of the Python typing library.

typingplus An enhanced version of the Python typing library that always uses the latest version of typing available, regardless of which version of Py

Contains 6 Mar 26, 2021
A plugin for flake8 integrating Mypy.

flake8-mypy NOTE: THIS PROJECT IS DEAD It was created in early 2017 when Mypy performance was often insufficient for in-editor linting. The Flake8 plu

Łukasz Langa 103 Jun 23, 2022
Flake8 plugin that checks import order against various Python Style Guides

flake8-import-order A flake8 and Pylama plugin that checks the ordering of your imports. It does not check anything else about the imports. Merely tha

Python Code Quality Authority 270 Nov 24, 2022
Check for python builtins being used as variables or parameters

Flake8 Builtins plugin Check for python builtins being used as variables or parameters. Imagine some code like this: def max_values(list, list2):

Gil Forcada Codinachs 98 Jan 08, 2023
Tool for automatically reordering python imports. Similar to isort but uses static analysis more.

reorder_python_imports Tool for automatically reordering python imports. Similar to isort but uses static analysis more. Installation pip install reor

Anthony Sottile 589 Dec 26, 2022
Unbearably fast O(1) runtime type-checking in pure Python.

Look for the bare necessities, the simple bare necessities. Forget about your worries and your strife. — The Jungle Book.

beartype 1.4k Jan 01, 2023
Mypy stubs for the PyQt5 framework

Mypy stubs for the PyQt5 framework This repository holds the stubs of the PyQt5 framework. It uses the stub files that are produced during compilation

62 Nov 22, 2022
Flake8 plugin for managing type-checking imports & forward references

flake8-type-checking Lets you know which imports to put in type-checking blocks. For the imports you've already defined inside type-checking blocks, i

snok 67 Dec 16, 2022
It's not just a linter that annoys you!

README for Pylint - https://pylint.pycqa.org/ Professional support for pylint is available as part of the Tidelift Subscription. Tidelift gives softwa

Python Code Quality Authority 4.4k Jan 04, 2023
mypy plugin for loguru

loguru-mypy A fancy plugin to boost up your logging with loguru mypy compatibility logoru-mypy should be compatible with mypy=0.770. Currently there

Tomasz Trębski 13 Nov 02, 2022