python - 无法从 Ruamel.yaml 导入 YAML

标签 python yaml ruamel.yaml

我正在尝试使用 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/

相关文章:

python - ConfigParser 获取所有具有重复项的键

oracle - Oracle DB 中 ENUM 列的 Liquibase 'addCheckConstraint' 允许任何字符

python - 如何使用 ruamel.yaml 添加评论

python - python 3.3和3.3m有什么区别

python - RabbitMQ 基础发布

python - 在 python 中将原始数据类型名称作为函数参数传递

从 YAML 传递数据连接 MYSQL 数据库时,Python 抛出 'ProgrammingError: 1045'

python - Python 3 引发的 IndentationError : unexpected indent,。Pod 部署 YAML 中 Kubernetes args 条目中使用的代码

python - 尝试加载特殊字符(非空白控件)时出现 ruamel.yaml ReaderError

python - 使用另一个 yaml 文件的内容更新