我正在尝试将MyPy与使用ruamel.yaml的模块一起使用,尽管Python没问题,但Mypy无法找到ruamel.yaml。我很困惑,因为即使这些语句在Python中都可以工作,我也找不到名为YAML.py的模块或名为YAML的类:
from ruamel.yaml import YAML
yaml = YAML()
x = yaml.load()
我需要怎么做才能使MyPy识别ruamel.yaml?
答案 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]
然后,当您再次运行它时,一切正常
等