将 Mypy 与 Ruamel.yaml 一起使用

问题描述 投票:0回答:4

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

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

我需要做什么才能让 MyPy 识别 ruamel.yaml?

mypy ruamel.yaml
4个回答
8
投票

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

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

背景

mypy 中有一个已知问题,请参阅此处

总结:

当 mypy 遇到

ruamel
时,有些东西与增量逻辑不兼容。

  • 运行一次后,一切正常。这是命令:

    python -m mypy myfile.py

  • 然后,当你再次运行时,你会得到一个错误:

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

  • 然后,当你再次运行时,一切就OK了

  • 等等


1
投票

您不应该寻找文件

YAML.py
 中的 
YAML

yaml = YAML()

是在

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

from ruamel.yaml import YAML

(另一种方法是在目录

yaml.py
下有一个文件
ruamel
,但是加载器/转储器有点太多了,无法放在一个文件中)。

如果上述知识不能帮助您解决问题,那么显式地 设置全局标志 mypy_path 或环境变量

MYPYPATH
可能会起作用。这必须包括目录
ruamel
所在的目录。

(我在文档中找不到它,但是从源代码(

mypy/build.py:mypy_path()
)中你可以看到这应该是一个在
os.pathsep
(这是冒号(
:
))上分割的字符串我的基于 Linux 的系统))


0
投票

我也有同样的问题。

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

临时“解决方案”是忽略缺少的导入异常

mypy --忽略缺失导入


0
投票

根据票7276,添加

--no-incremental
即可解决问题。 (我测试过,它确实解决了我的环境中的问题。)

© www.soinside.com 2019 - 2024. All rights reserved.