Configuração de mypy & pyright
Verificadores de tipo estático capturam bugs antes da execução. Configure mypy ou pyright em pyproject.toml, execute em CI junto com ruff 0.9+, e reforce o rigor à medida que a cobertura aumenta.
Busque em todas as páginas da documentação
Verificadores de tipo estático capturam bugs antes da execução. Configure mypy ou pyright em pyproject.toml, execute em CI junto com ruff 0.9+, e reforce o rigor à medida que a cobertura aumenta.
# pyproject.toml
[tool.mypy]
python_version = "3.14"
warn_return_any = true
warn_unused_ignores = true
disallow_untyped_defs = false
[tool.pyright]
pythonVersion = "3.14"
typeCheckingMode = "basic"uv run mypy src/
uv run pyrightQuando usar isso:
# Trecho de pyproject.toml para um app com layout src
[project]
name = "demo-app"
requires-python = ">=3.14"
[dependency-groups]
dev = ["mypy>=1.14", "pyright>=1.1.390", "ruff>=0.9"]
[tool.mypy]
python_version = "3.14"
packages = ["demo_app"]
namespace_packages = true
explicit_package_bases = true
warn_redundant_casts = true
warn_unused_ignores = true
pretty = true
[[tool.mypy.overrides]]
module = "tests.*"
disallow_untyped_defs = false
[tool.pyright]
include = ["src"]
exclude = ["**/__pycache__", "tests/fixtures"]
pythonVersion = "3.14"
typeCheckingMode = "standard"
reportMissingImports = true# .github/workflows/types.yml
name: types
on: [pull_request]
jobs:
mypy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
- run: uv sync --dev
- run: uv run mypy
- run: uv run pyrightO que isso demonstra:
packages + explicit_package_bases para descoberta mypy de layout srcstandard do pyright é mais rigoroso que basictypes-* no PyPI para bibliotecas de terceiros não tipadas.| Estágio | flags do mypy |
|---|---|
| 1 | warn_return_any |
| 2 | check_untyped_defs |
| 3 | disallow_untyped_defs por pacote |
| 4 | strict = true em novos módulos |
# instalar stubs para requests
uv add --dev types-requests
# mypy arquivo único
uv run mypy src/demo_app/main.py --show-error-codespackages. Correção: mypy_path ou configuração de pacote + instalação editável.reportMissingTypeStubs = false temporariamente.# type: ignore - Esconde erros reais para sempre. Correção: warn_unused_ignores e limpeza periódica.include/packages para seu código.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| apenas pyright | Equipe VS Code/Pylance | Plugins específicos do mypy necessários |
| apenas mypy | Plugins Django/mypy | Deseja paridade com Pylance |
| pytype | Pilhas legadas do Google | Greenfield |
| nenhum verificador | Script descartável | Serviços de produção |
Muitas equipes executam mypy em CI e pyright em IDE via Pylance - ou escolhem um portão de CI para começar.
pyproject.toml [tool.mypy] e [tool.pyright] preferidos em relação a arquivos ini dispersos.
Geralmente muito barulhento em brownfield - reforce módulo por módulo com overrides.
# type: ignore[arg-type] códigos específicos - exigido no mypy moderno com show_error_codes.
O plugin Pydantic 2 melhora a tipagem de modelos - ative na configuração do mypy para projetos FastAPI.
- repo: local
hooks:
- id: mypy
name: mypy
entry: uv run mypy
language: system
types: [python]Separe overrides de mypy por caminho de pacote ou use mypy -p package na matriz de CI.
Corresponda a requires-python e à matriz de CI - 3.14 para este cookbook.
Não - ruff formata/linta de forma complementar; a verificação de tipos continua sendo trabalho do mypy/pyright.
Comece apenas com erros; promova avisos para erros à medida que a dívida diminui.
Versões da Stack: Esta página foi escrita para Python 3.14.0 (3.14 estável, 3.13 de manutenção), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026