【问题标题】:mypypath: Cannot find module named 'tzwhere'mypypath:找不到名为“tzwhere”的模块
【发布时间】:2018-07-06 08:59:43
【问题描述】:

我正在学习mypy,我得到的第一个错误是cannot find module

我的文件是:

from tzwhere import tzwhere
tzw = tzwhere.tzwhere()
print(tzw)

它可以被python运行,因为安装了tzwhere包。但是当我通过 mypy 运行它时,我得到了这个:

mypy mp.py
mp.py:1: error: Cannot find module named 'tzwhere'
mp.py:1: note: (Perhaps setting MYPYPATH or using the "--ignore-missing-imports" flag would help)

如何让它说出No library stub file for module 'tzwhere' 并处理存根文件而不是Cannot find module

【问题讨论】:

  • 你在使用virtualenv吗?
  • @AzatIbrakov 我正在使用pipenv
  • 问题可能是你已经全局安装了mypy(并从那里调用它)并且tzwhere安装在你的本地环境中

标签: python mypy


【解决方案1】:

为了让 mypy(和其他 PEP 484 兼容工具)了解如何键入给定模块,它必须能够在某处找到该模块的存根。

Mypy(如果我们稍微简化一下的话)基本上检查两个不同的存根位置:

  1. 它检查typeshed 的本地副本,这是标准库和流行的第3 方库的类型提示库。 (typeshed 的副本会与 mypy 一起自动安装。)
  2. 它检查包本身是否为bundling type hints(例如,如果包是符合 PEP 561 的包)。

不幸的是,tzwhere 似乎没有做这些事情:我在 typeshed 上找不到它;它似乎不是捆绑类型。因此,mypy 将无法使用 tzwhere 准确键入检查代码。

您有三个主要选择:

  1. 只需通过在导入中添加# type: ignore 注释来抑制错误消息。请注意,这将在您的代码中引入一些动态:您从 tzwhere 使用的任何变量/函数都将被假定为 Any 类型。
  2. 为模块创建类型存根,将其存储在某个文件夹中,并将MYPYPATH 环境变量指向该文件夹。请注意,这将需要您进行一些侦探工作。 More details on how mypy finds imports here
  3. 如果您想与其他人分享您在第 2 步中的工作,请使用您的存根向 typeshed 提交拉取请求,或者使用 tzwhere 本身提交拉取请求以将其转换为符合 PEP 561 的包。在执行上述任何一项操作之前,请确保您获得了库作者的同意。

【讨论】:

    猜你喜欢
    • 2016-04-06
    • 2019-08-26
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多