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

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进行完整的类型检查:

  1. 把types-click添加到你的Poetry开发依赖中:
    poetry add --dev types-click
    
  2. 清理并重新运行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:42:37