mypypath:找不到名为“ tzwhere”的模块

时间:2018-07-06 08:59:43

标签: python mypy

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

我的文件是:

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

由于已安装tzwhere软件包,因此可以通过python运行。但是当我通过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

1 个答案:

答案 0 :(得分:0)

为了使mypy(和其他符合PEP 484的工具)了解如何键入给定的模块,它必须能够在某个地方找到该模块的存根。

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

  1. 它检查typeshed的本地副本,该副本是标准库和流行的第三方库的类型提示存储库。 (自动将mypy旁边安装的Typeshed副本。)
  2. 它检查程序包本身是否为bundling type hints(例如,程序包是否为符合PEP 561的程序包)。

不幸的是,看来tzwhere并没有做这两种事情:我在打字机上找不到它;它似乎不是捆绑类型。结果,mypy将无法使用tzwhere准确键入校验码。

您有三个主要选择:

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