【问题标题】:mypy: different error message for the same missing packagemypy:相同丢失包的不同错误消息
【发布时间】:2019-01-19 10:32:04
【问题描述】:

如果我在上面运行 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 在 typeshed 中没有存根文件(还),但我认为如果两个模块都安装在系统中,错误消息应该是“模块没有库存根文件..”,这两者有什么区别?

【问题讨论】:

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


    【解决方案1】:

    这两个错误消息的含义相同。唯一的区别是,如果您正在导入的模块被认为是“流行的”第三方库,那么您会收到第一条错误消息——特别是,如果它是模块之一in this list。在这种情况下,flask_sqlalchemy 是该列表的成员,但 flask_api 不是。

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

    您可能遇到的后续问题是“为什么 mypy 不只查看 pip 安装的内容,并在您尝试导入 pip 安装的任何东西时使用第一条错误消息?”。毕竟,无论如何,mypy 都需要这样做才能尝试找到 PEP 561 compatible packages —— 声明它们与类型提示捆绑在一起的包。

    好吧,mypy 可能 可以 这样做——但是这部分代码库是在 PEP 561 出现之前添加的(在 mypy 真正需要扫描 pip 安装的包之前),我怀疑很久没有人真正考虑过代码库的这个角落。

    【讨论】:

    • +1 用于后续问题,深入了解 mypy 的实现细节。现在,如果我只有技术知识来进行修复和 PR ..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多