ruamel.yaml:对 typ 和 pure=True 的说明
ruamel.yaml: clarification on typ and pure=True
我正在尝试了解 typ
和 pure=True
在 ruamel.yaml
Python 库中的含义。
我已阅读文档 here.
到目前为止,我了解到 typ='safe'
使用了一个安全加载器,它省略了 YAML 中的 YAML 标签解析(它们可能导致任意代码执行)。
我在文档中没有找到关于往返解析器 typ='rt'
的任何解释。
此外,我认为 pure=True
的解释令人困惑:
Provide pure=True
to enforce using the pure Python implementation (faster C libraries will be used when possible/available)
更快的 C 库是否与 pure=True
一起使用?如果他们这样做,为什么你需要首先指定这个标志?
有四个标准typ
参数:
rt
:(用于往返)在这种情况下,文档以保留注释等的特殊类型加载,用于转储。这是 ruamel.yaml
的创建目的,这是默认设置(即,如果您不指定 typ
,则会得到什么)。这是 safe
loader/dumper. 的子类
safe
:这只有 loads/dumps 标记的对象,当这些对象 显式 注册到 loader/dumper
unsafe
:尝试load/dump一切。 类 自动解析为 !!python/object:<module>/<class>
形式的标记
base
:loader/dumper,一切都源自于此。所有标量都作为字符串加载(甚至像 YAML 规范或 type description 中提到的特殊处理的整数、浮点数、布尔值等类型)
对于 safe
、unsafe
、base
,有更快的 C Loader 可用。如果您从 .tar.gz
文件安装,则只有在合适的编译器可用时,这些文件才会在安装过程中被编译。如果它们不可用,因为它们无法编译,则无法使用。
rt
代码没有 C 版本。所以不可能使用C库。
单词pure
用于仅使用Python 模块的情况。相反的是 "tainted": Python 被 C 扩展模块污染。没有 tainted=True
参数。当未指定 pure=true
时,这是隐含的(当 possible/available 时,请参阅上一段),因为 pure
的默认值为 False
为了进一步混淆你:以上是type
的四个基本(内置)值。如果您使用插件,您可以例如做
yaml = YAML(typ='jinja2')
如图in this answer
上面的一些信息可以从 YAML()
docstring 中获得,但是只有很少一部分被纳入包文档,这主要是由于 ruamel.yaml
作者的懒惰。
我正在尝试了解 typ
和 pure=True
在 ruamel.yaml
Python 库中的含义。
我已阅读文档 here.
到目前为止,我了解到 typ='safe'
使用了一个安全加载器,它省略了 YAML 中的 YAML 标签解析(它们可能导致任意代码执行)。
我在文档中没有找到关于往返解析器 typ='rt'
的任何解释。
此外,我认为 pure=True
的解释令人困惑:
Provide
pure=True
to enforce using the pure Python implementation (faster C libraries will be used when possible/available)
更快的 C 库是否与 pure=True
一起使用?如果他们这样做,为什么你需要首先指定这个标志?
有四个标准typ
参数:
rt
:(用于往返)在这种情况下,文档以保留注释等的特殊类型加载,用于转储。这是ruamel.yaml
的创建目的,这是默认设置(即,如果您不指定typ
,则会得到什么)。这是safe
loader/dumper. 的子类
safe
:这只有 loads/dumps 标记的对象,当这些对象 显式 注册到 loader/dumperunsafe
:尝试load/dump一切。 类 自动解析为!!python/object:<module>/<class>
形式的标记
base
:loader/dumper,一切都源自于此。所有标量都作为字符串加载(甚至像 YAML 规范或 type description 中提到的特殊处理的整数、浮点数、布尔值等类型)
对于 safe
、unsafe
、base
,有更快的 C Loader 可用。如果您从 .tar.gz
文件安装,则只有在合适的编译器可用时,这些文件才会在安装过程中被编译。如果它们不可用,因为它们无法编译,则无法使用。
rt
代码没有 C 版本。所以不可能使用C库。
单词pure
用于仅使用Python 模块的情况。相反的是 "tainted": Python 被 C 扩展模块污染。没有 tainted=True
参数。当未指定 pure=true
时,这是隐含的(当 possible/available 时,请参阅上一段),因为 pure
的默认值为 False
为了进一步混淆你:以上是type
的四个基本(内置)值。如果您使用插件,您可以例如做
yaml = YAML(typ='jinja2')
如图in this answer
上面的一些信息可以从 YAML()
docstring 中获得,但是只有很少一部分被纳入包文档,这主要是由于 ruamel.yaml
作者的懒惰。