Configuración de mypy y pyright
Los verificadores de tipos estáticos detectan errores antes de la ejecución. Configure mypy o pyright en pyproject.toml, ejecútelos en CI junto con ruff 0.9+ y ajuste la estrictez a medida que crece la cobertura.
Busca en todas las páginas de la documentación
Los verificadores de tipos estáticos detectan errores antes de la ejecución. Configure mypy o pyright en pyproject.toml, ejecútelos en CI junto con ruff 0.9+ y ajuste la estrictez a medida que crece la cobertura.
# 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 pyrightCuándo usar esto:
# Extracto de pyproject.toml para una aplicación con estructura 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 pyrightLo que esto demuestra:
packages + explicit_package_bases para el descubrimiento de mypy en la estructura srcstandard de pyright es más estricto que basictypes-* en PyPI para bibliotecas de terceros no tipadas.| Etapa | flags de mypy |
|---|---|
| 1 | warn_return_any |
| 2 | check_untyped_defs |
| 3 | disallow_untyped_defs por paquete |
| 4 | strict = true en nuevos módulos |
# instalar stubs para requests
uv add --dev types-requests
# mypy archivo único
uv run mypy src/demo_app/main.py --show-error-codespackages. Solución: mypy_path o configuración de paquete + instalación editable.reportMissingTypeStubs = false temporalmente.# type: ignore - Oculta errores reales para siempre. Solución: warn_unused_ignores y limpieza periódica.include/packages a su código.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| solo pyright | Equipo de VS Code/Pylance | Se necesitan plugins específicos de mypy |
| solo mypy | Plugins de Django/mypy | Se desea paridad con Pylance |
| pytype | Stacks heredados de Google | Desarrollo nuevo |
| sin verificador | Script desechable | Servicios de producción |
Muchos equipos ejecutan mypy en CI y pyright en el IDE a través de Pylance, o eligen un verificador en CI para empezar.
Se prefiere pyproject.toml [tool.mypy] y [tool.pyright] sobre archivos ini dispersos.
Generalmente demasiado ruidoso en proyectos existentes; ajustar módulo por módulo con anulaciones.
# type: ignore[arg-type] códigos específicos - requerido en mypy moderno con show_error_codes.
El plugin de Pydantic 2 mejora la tipificación de modelos; habilitar en la configuración de mypy para proyectos FastAPI.
- repo: local
hooks:
- id: mypy
name: mypy
entry: uv run mypy
language: system
types: [python]Anulaciones de mypy separadas por ruta de paquete o usar mypy -p package en la matriz de CI.
Coincidir con requires-python y la matriz de CI; 3.14 para este cookbook.
No - ruff formatea/linta como complemento; la verificación de tipos sigue siendo trabajo de mypy/pyright.
Comenzar solo con errores; promover las advertencias a errores a medida que se reduce la deuda.
Versiones de pila: Esta página se escribió para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ y uv 0.6+.
Revisado por Chris St. John·Última actualización: 16 jul 2026