将Mypy与Ruamel.yaml一起使用

时间:2018-09-05 15:54:45

标签: mypy ruamel.yaml

我正在尝试将MyPy与使用ruamel.yaml的模块一起使用,尽管Python没问题,但Mypy无法找到ruamel.yaml。我很困惑,因为即使这些语句在Python中都可以工作,我也找不到名为YAML.py的模块或名为YAML的类:

from ruamel.yaml import YAML
yaml = YAML()
x = yaml.load()

我需要怎么做才能使MyPy识别ruamel.yaml?

3 个答案:

答案 0 :(得分:0)

您不应该寻找文件YAML.py

中的YAML
yaml = YAML()

是一个在ruamel/yaml/main.py中定义的类,该类被导入到ruamel/yaml/__init__.py中(均在站点包下)。这就是您这样做的原因:

from ruamel.yaml import YAML

(另一种选择是在目录yaml.py下有一个文件ruamel,但是装载器/倾卸器太多,无法放入一个文件中。)

如果以上知识不能帮助您解决问题,则可能有效的是显式set the global flag mypy_path或环境变量MYPYPATH。其中必须包含目录ruamel所在的目录。

(我在文档中找不到它,但是从源(mypy/build.py:mypy_path())中您可以看到,这应该是一个在os.pathsep(即冒号)上分割的字符串。 (在基于Linux的系统上为:))

答案 1 :(得分:0)

我有同样的问题。

即使在设置MYPYPATH =。/。venv / lib / python3.7 / site-packages之后

一个临时的“解决方案”正在忽略缺少的导入异常

  

mypy --ignore-missing-imports

答案 2 :(得分:0)

一种解决方法是在没有mypy增量逻辑的情况下运行:

python -m mypy --no-incremental myfile.py

背景

mypy中存在一个已知问题,请参见here

总结:

在遇到ruamel时,mypy的增量逻辑无法正常工作。

  • 运行一次后,一切正常。这是命令: python -m mypy myfile.py

  • 然后,当您再次运行它时,会出现错误:

    error: Skipping analyzing 'ruamel': found module but no type hints or library stubs [import]

  • 然后,当您再次运行它时,一切正常