无法从Ruamel.yaml导入YAML

时间:2019-05-23 19:06:45

标签: python yaml ruamel.yaml

我正在尝试使用ruamel.yaml,并直接从ruamel的文档中使用此代码,但出现错误:

回溯(最近通话最近):   在第12行的文件“ ruameltest.py”中     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)

1 个答案:

答案 0 :(得分:0)

您的系统上安装的ruamel.yaml版本已严重过时,现在(2019年5月)为0.15.96。引入YAML类的API是您的程序无法找到的,是两年前引入的。

此外,自2019年3月18日起,您的Python(3.4)已停产。

您可以遵循旧的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而不是 code 加载数据的。

当然最好使用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