我试图了解typ
Python库中pure=True
和ruamel.yaml
的含义。
我已经阅读了文档here。
到目前为止,我已经了解到typ='safe'
使用了安全的加载程序,该加载程序省略了在YAML中解析的YAML标签(它们可能导致任意代码执行)。
我没有在文档中找到有关往返解析器typ='rt'
的任何解释。
此外,我认为对pure=True
的解释令人困惑:
提供
pure=True
以便使用纯Python实现(可能/可用时将使用更快的C库)
是否将更快的C库与pure=True
一起使用?如果有,为什么首先需要指定此标志?
答案 0 :(得分:2)
有四个标准typ
参数:
rt
:(用于往返)在这种情况下,文档以保留注释等特殊类型加载,用于转储。这就是为ruamel.yaml
创建的,这是默认的(即,如果您不指定typ
,则会得到的内容)。这是safe
加载程序/自卸程序的子类。safe
:仅在已显式向加载器/转储器unsafe
:尝试加载/转储所有内容。类会自动解析为!!python/object:<module>/<class>
base
:从中导出所有内容的加载程序/自卸程序。所有标量都作为字符串加载(甚至是整数,浮点数,布尔值之类的类型,它们都按照YAML规范或type description 对于safe
,unsafe
,base
,有更快的C加载程序可用。如果从.tar.gz
文件安装,则只有在适当的编译器可用时,它们才会在安装过程中进行编译。如果由于无法编译而不可用,则无法使用它们。
rt
代码没有C版本。因此,不可能使用C库。
pure
一词是当您使用仅Python模块时使用的。相反的是“污染的”:Python被C扩展模块污染了。没有tainted=True
参数。未指定pure=true
时,这是隐式的(如果可能/可用,请参阅上一段),因为pure
的默认值为False
为了进一步使您感到困惑:上面是type
的四个基本(内置)值。如果您使用插件,则可以做
yaml = YAML(typ='jinja2')
YAML()
docstring可以提供上述某些信息,但是由于ruamel.yaml
的作者的懒惰,这些信息很少进入软件包文档。