mypy默认按pyproject.toml、mypy.ini、.mypy.ini顺序从当前目录向上查找配置;推荐用pyproject.toml的[tool.mypy]段,运行时加--show-config确认加载情况。

mymypy 配置文件该放哪、叫什么名
默认不找 pyproject.toml,除非你显式指定或用新版 mypy(v1.0+)。老项目常见坑:配了 mypy.ini 却没生效,其实是 mypy 根本没读到它。
-
mypy会按顺序查找:pyproject.toml(推荐)、mypy.ini、.mypy.ini,从当前工作目录往上逐级找,找到第一个就停 - 如果用
pyproject.toml,必须把配置放在[tool.mypy]段下,不是[mypy]或[tool] - 运行
mypy时加--show-config能确认它实际加载了哪个文件、哪些选项
关键配置项:哪些必须开,哪些建议关
开太多检查会让团队立刻放弃;关太多等于白配。核心是守住「空值」和「类型擦除」这两条线。
- 必开:
disallow_untyped_defs = true(函数必须有类型注解),disallow_incomplete_defs = true(不能只写def foo() -> int:却不写 body) - 慎开:
check_untyped_defs = true(检查无类型函数的内部逻辑)——对旧代码杀伤力大,建议逐步开启 - 建议关:
warn_return_any = false(否则def f(): return some_lib_call()会狂报错,而很多库没类型提示) - 兼容性注意:
python_version = "3.10"必须和项目实际运行版本一致,否则list[str]这类字面量语法会被拒
如何让 mypy 忽略第三方库或特定文件
报错里一堆 Module has no attribute "xxx"?大概率是库没提供 stub,而不是你写错了。
系统特点: 商品多级分类检索、搜索,支持同一商品多重分类,自由设置显示式样 自由设置会员类型,自由设置权限项目,自由分配每种会员类型和每个会员的权限 灵活的商品定价,最多12级价格自由分配给各种会员类型或会员,也可针对单会员单商品特殊定价 强大的会员管理、帐户管理、订单管理功能和一系列帐务查询统计功能 灵活的会员积分系统,自由设置每个积分事件的积分计算方法 灵活的网站内容发布、管理系统,每个栏目可
- 忽略整个包:
[[tool.mypy.overrides]]+module = "requests.*"+ignore_missing_imports = true - 忽略单个文件:
files = ["tests/**.py"]或直接在文件头加# mypy: ignore-errors - 不要用
follow_imports = "silent"全局关闭导入检查——它会让类型推导彻底失效,表面安静,实则埋雷 - 想补第三方库类型?优先装
types-xxx包(如pip install types-requests),比盲目 ignore 更可靠
CI 里跑 mypy 的最小安全姿势
本地能过,CI 报错?八成是环境差异或路径问题。
立即学习“Python免费学习笔记(深入)”;
- 命令别只写
mypy .,改用mypy --show-traceback --no-error-summary src/ tests/,暴露真实错误位置 - 确保 CI 使用的 Python 版本和
pyproject.toml里python_version一致,否则Literal或Self会直接解析失败 - 避免
mypy --install-types自动装 stub——它可能装错版本,CI 应该靠requirements-dev.txt或pyproject.toml [tool.poetry.group.dev.dependencies]固化依赖 - 如果项目用了
src/结构,记得加packages = ["src"],否则 mypy 找不到模块顶层
最常被跳过的其实是 --show-config 和 --show-traceback 这两个开关。没它们,你看到的往往不是问题本身,而是 mypy 猜的结论。







