如果我在此运行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尚未在存入的文件中存根(但),但是我认为如果系统中同时安装了两个模块,则错误消息都应是“模块没有库存根文件。”,这两者之间有什么区别?
答案 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安装的软件包之前)添加了代码库的这一部分,我怀疑很长一段时间没有人真正想到过代码库的这个角落。