waylan/pyyaml-env-tag

GitHub: waylan/pyyaml-env-tag

一个 PyYAML 扩展库,通过自定义 !ENV 标签在 YAML 文件中直接引用环境变量,支持类型解析、默认值和多变量回退。

Stars: 13 | Forks: 4

# pyyaml_env_tag 一个用于在 YAML 文件中引用环境变量的自定义 YAML 标签。 [![PyPI Version](https://img.shields.io/pypi/v/pyyaml-env-tag.svg)][pypi-link] [![Build Status](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/997d3bc64c030231.svg)][GHAction-link] [![Coverage Status](https://codecov.io/github/waylan/pyyaml-env-tag/coverage.svg?branch=master)][codecov-link] ## 安装 使用 pip 安装 `pyyaml_env_tag` 包: ``` pip install pyyaml_env_tag ``` ### 启用标签 要启用该标签,请将您选择的加载器传入 `add_env_tag` 函数,该函数将返回已添加构造器的加载器。 ``` import yaml from yaml_env_tag import add_env_tag myLoader = add_env_tag(yaml.Loader) ``` 然后您就可以像往常一样使用该加载器。例如: ``` yaml.load(data, Loader=myLoader) ``` `add_env_tag` 是一个高级辅助函数。如果您需要更底层的访问权限,可以使用加载器的 `add_constructor` 方法将构造器(`yaml_env_tag.construct_env_tag`)直接添加到加载器中。请注意,这要求同时定义标签(`!ENV`)。 ``` from yaml_env_tag import construct_env_tag Loader.add_constructor('!ENV', construct_env_tag) ``` ## 使用标签 在 YAML 文件中包含标签 `!ENV` 并在后面加上环境变量的名称,该环境变量的值将被用于替代标签位置。 ``` key: !ENV SOME_VARIABLE ``` 如果 `SOME_VARIABLE` 被设置为 `A string!`,那么上述 YAML 将生成以下 Python 对象: ``` {'key': 'A string!'} ``` 变量的内容使用 YAML 的隐式标量类型进行解析,例如字符串、布尔值、整数、浮点数、时间戳和空值。更复杂的类型将无法识别,并直接作为字符串传递。例如,如果 `SOME_VARIABLE` 被设置为字符串 `true`,那么上述 YAML 将生成以下内容: ``` {'key': True} ``` 如果指定的变量未设置,则默认分配一个 `null` 值。您可以将自定义的默认值定义为序列中的最后一项。 ``` key: !ENV [SOME_VARIABLE, default] ``` 在上述示例中,如果未定义 `SOME_VARIABLE`,则将使用字符串 `default` 代替,如下所示: ``` {'key': 'default'} ``` 您可以列出多个变量作为回退。系统将使用第一个已设置的变量。在任何包含多个项目的序列中,最后一项必须始终是默认值,且不会被解析为环境变量。 ``` key: !ENV [SOME_VARIABLE, FALLBACK, default] ``` 与变量的内容一样,默认值也会被解析为隐含类型(字符串、布尔值、整数、浮点数、时间戳和空值)的 Python 对象。 当未设置 `SOME_VARIABLE` 时,以下四项将解析为相同的值(`None`): ``` - !ENV SOME_VARIABLE - !ENV [SOME_VARIABLE] - !ENV [SOME_VARIABLE, ~] - !ENV [SOME_VARIABLE, null] ``` ## 相关项目 pyyaml_env_tag 的灵感来源于 Ruby 包 [yaml-env-tag]。 [pyyaml-tags] 和 [python_yaml_environment_variables] 实现了一种在 YAML 文件中引用环境变量的替代方法。 这些库均使用模板字符串,并用变量的内容替换模板标签。虽然这允许单个值引用多个变量并包含额外内容,但这会将所有值限制为只能是字符串,并且不提供定义默认值的方法。 ## 许可证 pyyaml_env_tag 采用 `LICENSE` 中定义的 [MIT License] 授权。 ## 更新日志 ### [1.1] - 2025-05-13 - 确保测试随发行版一起包含 (#9)。 ### [1.0] - 2025-05-09 - 添加 `add_env_tag` 辅助函数,作为一种修改加载器的更高级方式。 ### [0.1] - 2020-11-11 初始版本。
标签:!ENV, PyPI, Python, PyYAML, YAML Loader, YAML解析, 变量注入, 恶意代码分析, 恶意代码分类, 数据序列化, 无后门, 环境变量, 自定义标签, 逆向工具, 配置文件