ruamel.yaml:关于typ和pure = True的说明

时间:2018-07-13 01:24:59

标签: python yaml ruamel.yaml

我试图了解typ Python库中pure=Trueruamel.yaml的含义。
我已经阅读了文档here
到目前为止,我已经了解到typ='safe'使用了安全的加载程序,该加载程序省略了在YAML中解析的YAML标签(它们可能导致任意代码执行)。
我没有在文档中找到有关往返解析器typ='rt'的任何解释。

此外,我认为对pure=True的解释令人困惑:

  

提供pure=True以便使用纯Python实现(可能/可用时将使用更快的C库)

是否将更快的C库与pure=True一起使用?如果有,为什么首先需要指定此标志?

1 个答案:

答案 0 :(得分:2)

有四个标准typ参数:

  • rt :(用于往返)在这种情况下,文档以保留注释等特殊类型加载,用于转储。这就是为ruamel.yaml创建的,这是默认的(即,如果您不指定typ,则会得到的内容)。这是safe加载程序/自卸程序的子类。
  • safe:仅在已显式向加载器/转储器
  • 注册时,才加载/转储已标记的对象。
  • unsafe:尝试加载/转储所有内容。类会自动解析为!!python/object:<module>/<class>
  • 形式的标签
  • base:从中导出所有内容的加载程序/自卸程序。所有标量都作为字符串加载(甚至是整数,浮点数,布尔值之类的类型,它们都按照YAML规范或type description
  • 中的说明进行了特殊处理

对于safeunsafebase,有更快的C加载程序可用。如果从.tar.gz文件安装,则只有在适当的编译器可用时,它们才会在安装过程中进行编译。如果由于无法编译而不可用,则无法使用它们。
rt代码没有C版本。因此,不可能使用C库。

pure一词是当您使用仅Python模块时使用的。相反的是“污染的”:Python被C扩展模块污染了。没有tainted=True参数。未指定pure=true时,这是隐式的(如果可能/可用,请参阅上一段),因为pure的默认值为False


为了进一步使您感到困惑:上面是type的四个基本(内置)值。如果您使用插件,则可以做

yaml = YAML(typ='jinja2')

如图in this answer


YAML() docstring可以提供上述某些信息,但是由于ruamel.yaml的作者的懒惰,这些信息很少进入软件包文档。