代码之家  ›  专栏  ›  技术社区  ›  kurtgn

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

  •  0
  • kurtgn  · 技术社区  · 7 年前

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

    我的档案是:

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

    python可以运行它,因为 tzwhere 已安装程序包。但当我在我的电脑里运行时,我得到了这个:

    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 回复  |  直到 7 年前
        1
  •  4
  •   Michael0x2a    7 年前

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

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

    1. 它检查本地副本 typeshed ,它是标准库和流行的第三方库的类型提示库。(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中的工作,请提交一个pull请求以使用存根打印,或者提交一个pull请求以将其自身转换为符合PEP 561的包。在做这两件事之前,一定要先得到图书馆作者的同意。