mypy:缺少同一包的其他错误消息

时间:2019-01-19 10:32:04

标签: python-3.x flask flask-sqlalchemy mypy

如果我在此运行mypy,基本上安装了flask_api和flask_sqlalchemy(通过pip3)

import flask_sqalchemy
import flask_api

错误消息是这个

testMypy.py:1: error: No library stub file for module 'flask_sqlalchemy'
testMypy.py:1: note: (Stub files are from https://github.com/python/typeshed)
testMypy.py:2: error: Cannot find module named 'flask_api'
testMypy.py:2: note: See https://mypy.readthedocs.io/en/latest/running_mypy.html#missing-imports

现在,我确实知道,自2019年1月19日起,flask_sqlalchemy和flask_api尚未在存入的文件中存根(但),但是我认为如果系统中同时安装了两个模块,则错误消息都应是“模块没有库存根文件。”,这两者之间有什么区别?

1 个答案:

答案 0 :(得分:1)

这两个错误消息表示同一件事。唯一的区别是,如果您要导入的模块被认为是“流行的”第三方库,则得到第一条错误消息-特别是,如果它是模块in this list之一。在这种情况下,flask_sqlalchemy是该列表的成员,但flask_api不是。

mypy对这些模块进行特殊处理的原因主要是出于可用性的考虑:当您似乎通过pip安装了类似“无法找到名为'blah'的模块”之类的错误消息时,这有点令人困惑。因此,它对可能常用的第三方库进行了特殊处理,从而至少可以改善那里的用户体验。

您可能会有一个后续问题:“为什么mypy不仅仅查看pip安装的内容,并在尝试导入任何pip安装的内容 时使用第一条错误消息?”。毕竟,mypy仍然需要这样做才能尝试找到PEP 561 compatible packages -声明它们与类型提示捆绑在一起的软件包。

好吧,mypy可能可以做到这一点-但是在PEP 561成为问题之前(在mypy确实需要扫描pip安装的软件包之前)添加了代码库的这一部分,我怀疑很长一段时间没有人真正想到过代码库的这个角落。