结构化配置库
项目描述
ZConfig: 模式驱动的配置
ZConfig 是一个面向通用用途的配置库。它支持一个层次化的模式驱动配置模型,允许模式指定用 Python 编写的数据转换例程。ZConfig 的模型与 Python 标准库中 ConfigParser 模块所支持的模型非常不同,更适合配置密集型应用。
ZConfig 模式是用基于 XML 的语言编写的,并且能够“导入”由 Python 包提供的模式组件。由于组件能够绑定到包中(或其它地方)的 Python 代码提供的转换函数,配置对象可以任意复杂,具有经过任意约束验证的值。这使得应用程序能够将配置支持与配置加载分离,即使配置数据由广泛的独立包定义和消耗。
ZConfig 根据 Zope 公共许可证(版本 2.1)授权。请参阅分发中的 LICENSE.txt 文件以获取完整的许可证文本。
参考文档可在 https://zconfig.readthedocs.io 查找。
有关 ZConfig 软件包最新发布版本的详细信息可在
您可以选择创建 RPM 并安装,或者直接从源分发安装。
关于 ZConfig 的讨论和问题有一个邮件列表;有关该列表的更多信息可在
配置日志
ZConfig 的一个常见用途是配置 Python 日志框架。这非常简单,以下示例展示了这一点
>>> from ZConfig import configureLoggers >>> configureLoggers(''' ... <logger> ... level INFO ... <logfile> ... PATH STDOUT ... format %(levelname)s %(name)s %(message)s ... </logfile> ... </logger> ... ''')
上述配置将根日志记录器配置为将记录的 INFO 级别或更高消息输出到控制台,如下面的示例所示
>>> from logging import getLogger >>> logger = getLogger() >>> logger.info('An info message') INFO root An info message >>> logger.debug('A debug message')
更常见的配置会将 STDOUT 替换为写入日志条目的文件路径。
有关更多信息,请参阅文档。
从源分发安装
对于简单的安装
python setup.py install
安装到用户的家目录
python setup.py install --home=<dir>
安装到另一个前缀(例如,/usr/local)
python setup.py install --prefix=/usr/local
有关安装软件包的更多信息,请参阅Python 打包用户指南。
ZConfig 的变更历史记录
4.1 (2024-05-03)
添加对 Python 3.12 的支持。
4.0 (2023-05-05)
取消对 Python 2.7、3.5、3.6 的支持。
3.6.1 (2022-12-06)
添加对 Python 3.11 的支持。
取消对 Python 3.4 的支持。
3.6.0 (2021-05-19)
添加对 Python 3.8、3.9 和 3.10 的支持。这主要涉及避免在 3.8 中使用“安全模板”格式样式时对格式字符串的新验证,因为这在 Python 标准库中不受支持。
添加了包含与< span class="docutils literal">pygments库兼容的词法分析器的< span class="docutils literal">ZConfig.pygments模块。通过入口点可发现;在Sphinx文档中的< span class="docutils literal">< span class="pre">code-block指令中使用< strong>zconfig作为高亮语言。
3.5.0 (2019-06-24)
向Sphinx扩展添加了对包含在包中的模式文件的文档支持。请参阅< a href="https://github.com/zopefoundation/ZConfig/issues/59" rel="nofollow">问题59。
3.4.0 (2019-01-02)
对日志配置的支持进行了许多更改
< span class="docutils literal">ZConfig.components.logger包定义的日志处理器部分类型支持额外的可选参数
- 样式
用于配置与Python 3标准库中找到的替代格式样式。支持四种< span class="docutils literal">style值:< span class="docutils literal">classic(默认值)、< span class="docutils literal">format(相当于Python 3中的< span class="docutils literal">< span class="pre">style='{')、< span class="docutils literal">template(相当于< span class="docutils literal">< span class="pre">style='$')和< span class="docutils literal">< span class="pre">safe-template(类似于< span class="docutils literal">template,但使用< span class="docutils literal">string.Template方法的< span class="docutils literal">safe_substitute方法)。为Python 2提供了一个最佳尝试实现。
- 任意字段
布尔值默认为< span class="docutils literal">False,以支持向后兼容,允许在格式字符串中接受任意替换字段名称(无论< span class="docutils literal">style设置如何)。这支持已知使用额外的字符串或数字字段生成日志记录的应用程序,至少对于某些记录器。如果在格式化时未提供额外字段,则仍会抛出异常,除非使用< span class="docutils literal">style值< span class="docutils literal">< span class="pre">safe-template。
< span class="docutils literal">ZConfig.components.logger包定义的< span class="docutils literal">logfile部分类型支持可选的< span class="docutils literal">delay和< span class="docutils literal">encoding参数。这些参数只能用于常规文件,不能用于特殊< span class="docutils literal">STDOUT和< span class="docutils literal">STDERR流。
在创建日志处理器之前(在工厂构造时)对< span class="docutils literal">logfile和< span class="docutils literal">< span class="pre">email-notifier部分的参数进行了更早的验证。这允许在打开任何日志文件之前对参数组合进行更多的检查。
< span class="docutils literal">ZConfig.components.logger.handlers.log_format数据类型函数现在支持包含对< span class="docutils literal">levelno的数字格式化的格式,并接受< span class="docutils literal">funcName作为有效的日志记录字段(在Python 2.6和3.1中添加)。
3.3.0 (2018-10-04)
放弃对Python 3.3的支持。
添加对Python 3.7的支持。
放弃对‘python setup.py test’的支持。请参阅< a href="https://github.com/zopefoundation/ZConfig/issues/38" rel="nofollow">问题38。
在< span class="docutils literal">section和< span class="docutils literal">multisection中添加了对< span class="docutils literal">example的支持,并将这些示例包含在生成的文档中。请参阅< a href="https://github.com/zopefoundation/ZConfig/pull/5" rel="nofollow">https://github.com/zopefoundation/ZConfig/pull/5。
修复配置加载器以使用UTF-8而不是默认编码(通常是ASCII)解码字节数据。请参阅< a href="https://github.com/zopefoundation/ZConfig/issues/37" rel="nofollow">问题37。
3.2.0 (2017-06-22)
放弃对Python 2.6和3.2的支持,并添加对Python 3.6的支持。
使用pypy和pypy3运行测试。
在< a href="https://zconfig.readthedocs.io" rel="nofollow">https://zconfig.readthedocs.io托管文档
BaseLoader现在是一个抽象类,无法实例化。
在配置中允许浮点数的< span class="docutils literal">nan、< span class="docutils literal">inf和< span class="docutils literal">< span class="pre">-inf值。请参阅< a href="https://github.com/zopefoundation/ZConfig/issues/16" rel="nofollow">https://github.com/zopefoundation/ZConfig/issues/16。
将脚本< span class="docutils literal">zconfig(用于模式验证)和< span class="docutils literal">zconfig_schema2html移植到Python 3。
一个新的 ZConfig.sphinx Sphinx 扩展简化了使用 Sphinx 文档中的描述和示例自动记录 ZConfig 组件的过程。请参阅 https://github.com/zopefoundation/ZConfig/pull/25。
简化了最大和最小出现值的内部模式处理。请参阅 https://github.com/zopefoundation/ZConfig/issues/15。
几乎所有将 type 作为参数名称的使用都已被替换为 type_,以避免覆盖内置类型。这些通常不是公开的 API,并且没有被期望使用关键字参数调用,因此不应有任何用户可见的变化。请参阅 https://github.com/zopefoundation/ZConfig/issues/17
3.1.0 (2015-10-17)
增加了使用 $() 语法从环境变量中执行变量替换的能力。
3.0.4 (2014-03-20)
增加了 Python 3.4 支持。
3.0.3 (2013-03-02)
增加了 Python 3.2 支持。
3.0.2 (2013-02-14)
修复了 BaseLoader.openResource() 中的 ResourceWarning。
3.0.1 (2013-02-13)
从代码中移除了一个意外留下的 pdb 语句。
修复了 Python 3 中自定义字符串 repr() 函数的 bug。
3.0.0 (2013-02-13)
增加了 Python 3.3 支持。
删除了 Python 2.4 和 2.5 支持。
2.9.3 (2012-06-25)
修复了:不允许端口值为 0。端口 0 用于请求一个临时端口。
2.9.2 (2012-02-11)
调整测试类以避免(至少)"nose" 测试运行器将其视为单独的测试用例。
2.9.1 (2012-02-11)
使 FileHandler.reopen 方法线程安全。
2.9.0 (2011-03-22)
允许对 %define 名称进行相同的重定义。
增加了对 IPv6 地址的支持。
2.8.0 (2010-04-13)
修复了相对路径识别问题。 https://bugs.launchpad.net/zconfig/+bug/405687
在 Python 2.6 中增加了对电子邮件记录器的 SMTP 认证支持。
2.7.1 (2009-06-13)
改进了文档。
修复了在 Windows 上的测试失败。
2.7.0 (2009-06-11)
增加了一个方便的函数,ZConfig.configureLoggers(text),用于配置记录器。
放宽了对记录器名称在记录器部分的要求,允许记录器部分同时用于根和非根记录器。
2.6.1 (2008-12-05)
修复了对覆盖基模式描述的方案描述的支持。如果多个基模式提供描述,但派生模式没有,则提供描述的第一个基模式获胜。 https://bugs.launchpad.net/zconfig/+bug/259475
修复了与 Python 2.5.0 的兼容性 bug。
不再在 Python 2.6 下触发弃用警告。
2.6.0 (2008-09-03)
增加了支持通过指定时间和间隔来指定日志文件轮转的文件轮转支持,而不是最大大小。
从 setup.py 中移除了对 setuptools 的依赖。
2.5.1 (2007-12-24)
通过 'python setup.py test' 运行单元测试成为可能(需要在 sys.path 上有 setuptools)。
为测试失败断言增加了更好的错误信息。
2.5 (2007-08-31)
有关版本号的说明
版本控制系统中发现的信息表明,一些过去的版本被称为“2.4”,尽管不清楚是否实际发布了具有该版本号的任何版本。我们将完全跳过修订版 2.4,以避免任何使用声称是 ZConfig 2.4 的人可能遇到的问题,并直接跳到版本 2.5。
增加了对从 ZIP 存档(包括 eggs)导入方案组件的支持。
在日志处理程序部分中添加了“formatter”配置选项,允许指定格式化程序构造函数。
记录了扩展方案时可以使用的 URL 方案。
增加了通过 ZConfig.components.logger 包重新打开所有通过配置打开的日志文件的支持。对于 Zope,这可以通过 zc.signalhandler 包使用。ZConfig 不需要 zc.signalhandler。
增加了通过大小内部轮转日志文件的支持。
添加了无模式解析的最小实现;这主要用于希望读取多个ZConfig配置文件片段并组装成综合配置的应用程序。在 zc.buildout 的一些食谱中使用。
改为使用 zc.buildout 和来自 zope.testing 的标准测试运行器。
添加了更多测试。
2.3.1 (2005-08-21)
将一些规范化的代码隔离,以便至少更容易覆盖。这仍然是非平凡的。
2.3 (2005-05-18)
将“inet-binding-address”和“inet-connection-address”添加到标准数据类型集合中。这些与“inet-address”类型相似,但默认主机名更合理。使用的数据类型应反映值的用途。
为Windows添加了备用旋转日志文件处理器,以避免平台对重命名打开文件的限制。由Sidnei da Silva贡献。
对于
和 ,如果省略了name属性,则假定name="*",因为这是最常用的。
2.2 (2004-04-21)
编写了更多文档。
添加了一个 timedelta 数据类型函数;输入与 time-interval 数据类型的输入相同,但结果值是 datetime.timedelta 对象。
确保将
元素的属性指定的键转换为适当的键类型,并对派生部分重新进行检查。 重构了 ZConfig.components.logger 规范组件,以便如果需要,可以只导入“eventlog”或“logger”部分之一。这有助于避免命名冲突。
向日志工厂添加了 reopen() 方法。
打开 FileHandler 时始终使用绝对路径名。
修复了日志器 'format' 键,允许使用 logging 包支持的 %(process)d 扩展变量。
添加了一个新的 timedelta 内置数据类型。类似于 time-interval,但返回 datetime.timedelta 对象。
2.1 (2004-04-12)
移除了与 Python 2.1 和 2.2 的兼容性。
规范组件必须在 Python 包中;目录搜索已修改,以执行导入以定位包,而不是错误地实现搜索算法。
现在,用于部分值的默认对象提供了 getSectionAttributes() 方法;这返回存储配置定义数据的部分对象的所有属性列表(包括从规范派生出的信息)。
现在可以通过使用
包括默认信息在 和 的规范中。 添加了更多文档来讨论规范扩展。
已修复对无Unicode Python的支持。
如果未显式标识数据类型,派生部分类型现在继承基本类型的数据类型。
派生部分类型现在可以覆盖键类型,而不是始终从其基本类型继承。
如果包名以点开始,
使用当前前缀。 添加了两个标准数据类型:dotted-name 和 dotted-suffix。
添加了两个标准规范组件:ZConfig.components.basic 和 ZConfig.components.logger。
2.0 (2003-10-27)
可以使用新的 “%import” 指令导入额外的规范组件;这可以用于将第三方组件集成到应用程序中。
可以使用
元素上的新 “extends” 属性扩展规范。 当规范定义中的元素不正确嵌套时,提供了更好的错误信息。
如果只需要验证规范定义是否有效,则“zconfig”脚本现在可以简单地执行此操作。
1.0 (2003-03-25)
初始发布。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。