【问题标题】:Why is mypy finding "no type hints or library stubs" for any of my imports?为什么 mypy 会为我的任何导入找到“没有类型提示或库存根”?
【发布时间】:2021-05-02 22:28:15
【问题描述】:

我正在编写一个代码库,其中包含很多类型提示,是以前的开发人员编写的。在某些时候,我注意到这些提示没有得到类型检查,如果我想要检查它们,我需要在构建中添加一个步骤。我对 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 标志之前,增加工作量。大多数项目肯定会导入不使用类型提示的库,并且需要使用这个标志吗?

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

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

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

【问题讨论】:

  • 我目前正面临 numpy 这个问题。 numpy 1.20.0 似乎比以前的版本更兼容 mypy。两个候选版本是available,最终版本即将发布。它可以从源代码编译。 --ignore-missing-imports 是一种解决方案,直到这些软件包更广泛地可用。

标签: python type-hinting mypy


【解决方案1】:

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

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

【讨论】:

  • 错误消息说“找到模块但没有类型提示或库存根”,所以我希望它找到了模块。我也知道模块已安装,因为使用该模块的代码按预期运行。
  • 您尝试运行该命令后问题仍然存在吗?
  • 我刚刚尝试运行mypy --install-types;该命令以返回码 0 退出,但没有输出。运行 mypy 仍然会给出“找到的模块,但没有类型提示或库存根”。
  • 我在使用 requests 库时遇到了同样的错误。运行 mypy --install-types 返回代码 0 但什么也不做。我什至手动安装了types-requests,但遇到了同样的问题。
  • 参考stackoverflow.com/questions/60716482/…。其中给出了详细的解释。希望对您有所帮助!
猜你喜欢
  • 2021-10-17
  • 2020-01-07
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 2020-06-28
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多