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

问题描述 投票:0回答:1

我正在开发一个代码库,其中有很多由以前的开发人员编写的类型提示。在某些时候,我注意到这些提示没有进行类型检查,如果我想检查它们,我需要在构建中添加一个步骤。我对 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 并继续?


    

python type-hinting mypy
1个回答
6
投票
mypy

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

您可以通过运行建议的 pip 命令来解决该问题。或者,您可以使用 

--install-types

安装所有已知缺失的存根:

mypy --install-types
    

© www.soinside.com 2019 - 2024. All rights reserved.