【发布时间】: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