我正在开发一个代码库,其中包含许多由以前的开发人员编写的类型提示。在某个时刻,我注意到这些提示没有进行类型检查,如果我想检查它们,我需要在构建中添加一个步骤。我对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文档的这一页。这可以说是非常清楚的,但让我困惑的是,这似乎表明这个错误是一个应该解决的大问题。它提供了多种解决方案,即在它们最终告诉您将使所有错误静音的CLI标志之前,增加工作量级别。当然,大多数项目都会导入不使用类型提示的库,并且需要使用此标志?
由于这些线索,我决定可能应该继续尝试,并寻找包裹。接下来让我困惑的是,它似乎无法为我的所有导入的找到类型提示。我不认为更晦涩的库会有编写的类型提示,但肯定有人为numpy或pytest编写过它们吗?文档中说,我应该通过将types-
附加到主程序包名称来查找程序包,所以我运行pip install types-numpy
,但它找不到任何内容。
现在我开始怀疑我的机器是否无法连接到某种服务,比如";typeshed";是Pip可以很好地找到包,但也许typeshed是一个单独的协议,目前已经关闭或其他什么?或者这与我使用的是旧版本的python(3.6)有关?我决定在这里手动搜索包,但我几乎看不到任何以types-
开头的包。
所以我的总体问题是,是发生了什么奇怪的事情,还是我应该用--ignore-missing-imports
标志运行mypy并继续前进
此错误是因为mypy
找不到要导入的模块,无论它是否与类型提示捆绑在一起。此外,请确保您的进口商品没有拼写错误。
您可以通过运行建议的一个或多个pip命令来解决此问题。或者,您可以使用--install-types
安装所有已知丢失的存根:mypy --install-types