用途:为 Python 包建立可辩护的静态类型检查方案——选定一个检查器、固定版本、在 pyproject.toml 中配置、按模块设置豁免并作为债务跟踪、逐步收紧严格度;对库还需提供 py.typed 标记并验证其进入构建的 wheel。也涵盖修复检查器报出的错误。
主要能力:先调研项目布局(src/ 或扁平)、导入包名、库还是应用、requires-python 的最低支持版本、是否需要框架插件(grep -E "django|sqlalchemy|pydantic" pyproject.toml,插件仅 mypy 有)、现有配置与新项目还是遗留代码。检查器选择规则:Django/Pydantic 插件栈选 mypy;新项目、VS Code 团队选 pyright;非 VS Code 编辑器或想要更严默认值选 basedpyright;uv/Ruff 且能容忍 beta 变动可本地试点 ty,CI 仍用 mypy 或 pyright;超大型 monorepo 可评估 Pyrefly。只选一个作为 CI 门禁。
使用方式:固定版本安装,例如 uv add --dev "mypy==2.3.1" 或 "pyright==1.1.413",运行 uv run mypy src tests 或 uv run pyright;无 uv 时用 python -m pip install "mypy==2.3.1" 后 python -m mypy src tests;ty 试点可用 uvx --from "ty==0.0.80" ty check src。配置写入 pyproject.toml 的 [tool.mypy](strict = true、warn_unused_ignores = true、python_version 取最低支持版本)或 [tool.pyright](include、exclude、typeCheckingMode、pythonVersion),basedpyright 用 [tool.basedpyright],ty 读 [tool.ty]。严格度:新项目首提交即 strict;遗留代码用全局 strict 加按模块 ignore_errors 的棘轮,豁免只减不增,并把策略记录在 CONTRIBUTING 或 README。库需 touch src/<pkg>/py.typed,构建后用脚本验证 wheel/sdist 中存在该标记。修复错误顺序:先真实 bug,再未类型化的第三方导入(优先装 types-* 存根并固定版本),最后用错误码限定的抑制注释处理误报,并开启未使用忽略检测。
适用场景与限制:适用于 Python 包与应用的类型检查搭建。不适用于 Ruff lint/format(含 ANN 规则)、pytest 失败、运行时异常、CI 工作流 YAML、pre-commit 接线、打包元数据与构建后端(除 py.typed 本身)。注意:mypy 默认跳过未注解函数体,需 check_untyped_defs 或 strict;全局 strict 与按模块降级不能干净组合;pyright 对遗留代码报错更多;py.typed 可能被构建后端丢弃;两个检查器需双份抑制注释;strict 在各工具间不可移植;Pydantic 校验器存在误报且静态干净不等于运行时安全;ty/Pyrefly 尚无插件系统且仍在 beta;pyright 的 exclude 是叠加的;Ruff 不是类型检查器;检查器升级可能改变默认行为,故需固定版本。