Mypy检测项目src子目录Poetry包时出现类型检查错误求助
解决Mypy对本地src目录包的导入错误
问题原因
Mypy默认优先查找已安装到site-packages的包(Poetry安装项目后会把src里的api等包链接/安装到site-packages),所以它把api当成了第三方依赖包,而非本地项目源码,因此会要求提供类型存根或py.typed标记,而不会去解析你本地src目录里的源码。
解决方案
1. 配置Mypy识别src为源码根目录
在你的pyproject.toml中添加Mypy的配置,指定pythonpath包含src目录,让Mypy优先扫描本地源码而非已安装的包:
[tool.mypy] pythonpath = ["src"]
或者如果使用独立的mypy.ini文件,添加:
[mypy] python_path = src
2. 确保包结构完整
每个Python包目录下(src/api、src/another_api)都需要有__init__.py文件(可以是空文件),这样Mypy才能正确识别它们为可导入的Python包。
3. 可选:添加py.typed标记(若需发布包)
如果后续需要将包发布到PyPI,在每个包的根目录(比如src/api/)创建一个空的py.typed文件,明确告知Mypy该包包含类型信息。不过仅本地开发时,前两步已经足够解决问题。
验证操作:运行mypy src/,此时Mypy会正确解析src/api/main.py中导入的api.constants模块,进行类型检查而非跳过。
内容的提问来源于stack exchange,提问作者masec
相关产品推荐
相关产品推荐

