我正在尝试使用 ruamel.yaml 并直接使用 ruamel 文档中的代码,但收到错误:
回溯(最近一次调用最后一次): 文件“ruameltest.py”,第 12 行,位于 yaml = YAML() NameError:名称“YAML”未定义
我使用的是 Linux (RHEL)
Python 3.4.9
rpm包:python34-ruamel-yaml-0.13.14-1.el7.x86_64
如何解决这个问题?
import sys
from ruamel.yaml import YAML
inp = """\
# example
name:
# details
family: Smith # very common
given: Alice # one of the siblings
"""
yaml = YAML()
code = yaml.load(inp)
code['name']['given'] = 'Bob'
yaml.dump(code, sys.stdout)
最佳答案
您的系统安装的 ruamel.yaml 版本严重过时,现在(2019 年 5 月)为 0.15.96。引入 YAML
类的 API 是两年前引入的,但您的程序无法找到该类。
此外,您的 Python (3.4) 自 2019 年 3 月 18 日起已终止生命。
您可以遵循旧的 PyYAML API:
import sys
from ruamel.yaml import RoundTripLoader, RoundTripDumper, load, dump
inp = """\
# example
name:
# details
family: Smith # very common
given: Alice # one of the siblings
"""
data = load(inp, Loader=RoundTripLoader)
data['name']['given'] = 'Bob'
dump(data, sys.stdout, Dumper=RoundTripDumper)
给出:
# example
name:
# details
family: Smith # very common
given: Bob # one of the siblings
请注意,您从 YAML 加载数据,而不是代码。
使用最新版本的 ruamel.yaml 和维护的版本当然会更好
Python 版本。如果您无法安装较新的 Python 版本或自己编译它,您
仍然可以安装更新版本的 ruamel.yaml
:
$ python3 -m venv ~/venv/yamltest
$ source ~/venv/yamltest/bin/activate
$ pip install -U pip
$ pip install 'ruamel.yaml<=0.15.94'
然后您应该能够按原样使用您的程序。
0.15.94 之后发布的较新版本不包含 .whl
文件
对于 Python 3.4,这些版本可能仍然有效,但您可能会
需要安装编译器才能使用 C 扩展,并且
如果你这样做,你应该下载并安装 Python 3.7
关于python - 无法从 Ruamel.yaml 导入 YAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56281529/