You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么mypy扫描目录和扫描单个文件时输出的错误结果不一致?

差异产生的核心原因

你使用的mypy 0.910版本存在默认模块检查规则:

  • 执行目录级扫描(mypy .)时,默认仅对标记为类型友好(即模块目录下存在py.typed标识文件)的模块执行全量类型校验;未标记的模块仅会做第三方库导入合法性校验,不会检查内部代码的类型注解缺失、无类型函数调用等问题。你测试用的pingouin仓库对应提交版本中,pingouin模块目录下没有py.typed标识文件,因此目录扫描时仅输出了导入相关错误。
  • 直接指定单个文件路径执行mypy <文件路径>时,mypy会绕过上述模块检测规则,强制对指定文件执行全量规则检查,因此会输出你预期的所有错误。

统一输出的配置方法

通过修改mypy配置文件(项目根目录下的mypy.ini、pyproject.toml或.mypy.ini)即可让目录扫描输出和单文件扫描一致的全量错误,任选以下一种配置即可:

方法1:全局开启所有模块全量检查

如果是mypy.ini配置文件,添加如下内容:

[mypy]
strict = true
show_error_codes = true
exclude = venv/
# 核心配置:强制检查所有模块,不受py.typed标记限制
check_untyped_defs = true
disallow_untyped_defs = true
no_silent_imports = true

如果是pyproject.toml配置文件,添加如下内容:

[tool.mypy]
strict = true
show_error_codes = true
exclude = "venv/"
check_untyped_defs = true
disallow_untyped_defs = true
no_silent_imports = true

配置完成后先删除mypy缓存目录.mypy_cache,再执行mypy .即可得到和单文件扫描一致的结果。

方法2:仅对指定模块开启全量检查

如果你不需要检查所有模块,仅需要检查项目自有代码,可以单独指定模块检查规则,避免第三方依赖产生过多无关错误:

[mypy-pingouin.*]
check_untyped_defs = true
disallow_untyped_defs = true

配置后目录扫描时仅会对pingouin目录下的代码执行全量检查,其他模块保持默认校验规则。


内容的提问来源于stack exchange,提问作者baxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:48:04