mypy 是 Python 的标准静态类型检查器,用于在运行前捕获类型错误,并提升代码文档性与 IDE 支持。它支持 PEP 484 类型提示和渐进式类型化,可以在不改变 Python 动态特性的前提下逐步为现有代码添加类型。
主要能力
- 渐进式类型化:可逐步为已有代码添加类型。
- 严格模式:通过 --strict 标志获得最大类型安全。
- 类型推断:可根据上下文自动推断类型。
- Protocol 支持:提供结构化类型(带类型的鸭子类型)。
- 泛型类型:支持 TypeVar、Generic 及高级类型模式。
- 框架集成:兼容 FastAPI、Django、Pydantic。
- 插件系统:可为库扩展类型检查。
- 增量检查:适合大型代码库的快速类型检查。
- 支持 Literal、Type Alias、NewType、Callable 等高级类型提示。
安装 基础安装:pip install mypy 配合常见类型存根:pip install mypy types-requests types-PyYAML types-redis FastAPI 项目:pip install mypy pydantic Django 项目:pip install mypy django-stubs 开发环境:pip install mypy pre-commit
使用方式 可通过命令行运行 mypy(例如 mypy src/),也支持 mypy.ini 或 pyproject.toml 配置。常用配置项包括 python_version、files、exclude、disallow_untyped_defs、no_implicit_optional、warn_return_any、warn_unused_ignores、warn_redundant_casts、show_error_codes、incremental、cache_dir 等,并可按模块覆盖(如对 tests.、migrations. 或缺少存根的第三方库设置 ignore_missing_imports)。严格模式可用 mypy --strict src/,或使用一组等价标志(如 --disallow-untyped-defs、--warn-return-any、--strict-equality 等)。增量迁移时,可从入口文件(如 main.py)开始检查,逐步扩大范围;按模块启用严格检查;策略性使用 # type: ignore 并配合错误码;在开发中使用 reveal_type 查看推断类型。
框架集成
- FastAPI:结合 Pydantic 模型为请求与响应提供类型安全;支持异步端点与依赖注入(Annotated、Depends)的类型标注。
- Django:借助 django-stubs 与 mypy_django_plugin,为模型、视图(HttpRequest、HttpResponse、JsonResponse)及 QuerySet 添加类型提示。
适用场景 希望在 CI 或本地对 Python 项目进行静态类型检查、为 FastAPI 或 Django 项目引入类型安全、在大型代码库中逐步采用类型提示并保持增量检查速度。
限制 资料未提供 mypy 的收费、价格、平台范围、性能指标的完整说明,也未提供全部功能边界,相关事实暂未提供。