Python 3.7环境下MyPy无法检测到click等第三方库存根文件的问题咨询
解决Mypy在Python3.7环境下找不到click存根文件的问题
我来帮你拆解下这个问题的原因和解决办法:
问题根源
你遇到的核心问题是:Python3.7的nox虚拟环境中缺少click对应的类型存根文件,而Python3.8环境因为之前的操作(比如手动安装过、或其他依赖间接引入)已经有了这些存根。
你的click版本是7.1.2,这个版本本身并没有内置类型提示(.pyi文件),Mypy要识别它的类型,必须依赖第三方类型存根包types-click。而你的nox配置里只安装了mypy,没有安装对应的类型存根,再加上3.7的虚拟环境是“干净”的,就触发了找不到存根的错误。
至于3.8环境能成功,大概率是因为这个虚拟环境之前被复用的时候,已经安装过types-click(比如某次调试时手动安装、或其他session的依赖带进来的),所以Mypy能找到存根文件。
解决方案
方案一:安装官方类型存根(推荐)
这是最规范的解决方式,能让Mypy对click进行完整的类型检查:
- 把
types-click添加到你的Poetry开发依赖中:poetry add --dev types-click - 清理并重新运行nox的mypy会话(确保新依赖被加载):
rm -rf .nox/mypy-3-7 nox -rs mypy
这样Poetry导出requirements.txt时会包含types-click,nox在安装mypy时会同时安装这个存根包,两个Python版本的环境都能正常进行类型检查了。
方案二:临时忽略缺失导入(快速 workaround)
如果你暂时不想安装类型存根,可以像处理requests那样,在mypy.ini里忽略click的缺失导入:
[mypy] [mypy-nox.*,pytest,requests,click,click.testing] ignore_missing_imports = True
但这个方法只是跳过错误,无法获得完整的类型检查能力,不推荐长期使用。
额外验证
如果想确认3.8环境的成功确实是因为已有存根,可以删除3.8的虚拟环境重新运行:
rm -rf .nox/mypy-3-8 nox -rs mypy
如果此时3.8也出现同样的错误,就完全验证了我们的判断——之前的成功只是因为虚拟环境里碰巧有了存根。
内容的提问来源于stack exchange,提问作者navneethc
相关产品推荐
相关产品推荐

