微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 mypy 为我的任何导入找到“没有类型提示或库存根”?

如何解决为什么 mypy 为我的任何导入找到“没有类型提示或库存根”?

我正在编写一个代码库,其中包含许多以前的开发人员编写的类型提示。在某些时候,我注意到这些提示没有进行类型检查,如果我想要检查它们,我需要在构建中添加一个步骤。我对 python 很熟悉,但从来没有使用过类型提示,所以我阅读了很多关于它们的书,我仍然有很多东西要理解。最终我得出结论,mypy 是用于对这些类型提示进行类型检查的主程序。所以我 pip 安装了 mypy 并运行了 mypy .我有很多这样的错误

error: Skipping analyzing 'setuptools': found module but no type hints or library stubs
error: Skipping analyzing 'numpy': found module but no type hints or library stubs
error: Skipping analyzing 'tensorflow.compat.v1': found module but no type hints or library stubs
error: Skipping analyzing 'tensorflow': found module but no type hints or library stubs

我很惊讶这些认情况下被认为是错误,因为我读到的关于类型提示的所有内容都强调它们是可选的。所以我的第一个问题是,为什么 mypy 将上述内容视为停止显示错误而不是简单的警告?

然后我用谷歌搜索错误信息并找到了 mypy 文档的 this page。这可以说是很清楚了,但让我感到困惑的是,它似乎表明这个错误一个应该解决的大问题。它提供了多个选项来解决它的增加工作水平,然后他们最终告诉您 CLI 标志将使所有错误消失。肯定大多数项目会导入不使用类型提示的库,并且需要使用这个标志?

由于这些线索,我决定我可能应该继续尝试,并寻找包裹。接下来让我感到困惑的是,它似乎无法为我的所有 导入找到类型提示。我不希望更多晦涩的库编写类型提示,但肯定有人为 numpy 或 pytest 编写了它们?文档说我应该通过将 types- 附加到主包名称来查找包,所以我运行 pip install types-numpy,但它没有找到任何东西。

现在我开始怀疑我的机器是否无法连接到某种服务,比如“typeshed”是什么? Pip 可以很好地找到包,但也许 typeshed 是一个单独的协议,目前已关闭或其他什么?或者它是否与我使用的是旧版本的 python (3.6) 的事实有关?我决定手动搜索软件包 here,但我几乎看不到任何以 types- 开头的软件包。

所以我的总体问题是,发生了什么奇怪的事情,还是我应该使用 --ignore-missing-imports 标志运行 mypy 并继续?

解决方法

此错误是因为 mypy 无法找到您尝试导入的模块,无论它是否与类型提示捆绑在一起。此外,请确保您的导入没有拼写错误。

您可以通过运行建议的 pip 命令或命令来解决该问题。或者,您可以使用 --install-types 安装所有已知的缺失存根:mypy --install-types

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。