getconf,适用于Python项目的多功能配置库
项目描述
getconf项目为Python程序提供简单的配置助手。
它提供了一个简单的API,用于从各种配置文件和环境变量中读取
import getconf
config = getconf.ConfigGetter('myproj', ['/etc/myproj.conf'])
db_host = config.getstr('db.host', 'localhost')
db_port = config.getint('db.port', 5432)
除了这个API之外,getconf旨在统一开发和生产系统之间的配置设置,尊重每个系统中的标准程序
允许开发系统上的用户空间配置
允许持续集成系统有多个不同的配置
在传统的生产服务器上使用标准配置空间/etc
处理基于云平台的基于环境的配置
getconf在两个条款的BSD许可证下发行,其副本位于源代码中。
getconf v1.11及其以后的版本支持Python 3.5、3.6、3.7、3.8、3.9和3.10。v1.11.x是支持Python 3.5和3.6的最后一个版本。v1.9.x是支持Python 2.7和3.4的最后一个版本。v1.8.x是支持Python 3.3的最后一个版本。v1.5.x是支持Python 2.6的最后一个版本。
链接
ReadTheDocs上的文档:ReadTheDocs:http://readthedocs.org/docs/getconf/
GitHub上的源代码:GitHub:http://github.com/Polyconseil/getconf/
安装
使用pip从PyPI安装包
pip install getconf
或从GitHub
git clone git://github.com/Polyconseil/getconf
getconf除了Python之外没有外部依赖
简介
所有配置值都通过getconf.ConfigGetter对象访问
import getconf
config = getconf.ConfigGetter('myproj', ['/etc/myproj/settings.ini', './local_settings.ini'])
上述行声明
使用myproj命名空间(稍后解释;这主要用于基于环境的配置,作为环境变量的前缀)
查看,依次是/etc/myproj/settings.ini(用于生产)和./local_settings.ini(用于开发);后者覆盖前者。
一旦配置了getconf.ConfigGetter,就可以用它来检索设置
debug = config.getbool('debug', False)
db_host = config.getstr('db.host', 'localhost')
db_port = config.getint('db.port', 5432)
allowed_hosts = config.getlist('django.allowed_hosts', ['*'])
所有设置都有一个类型(默认是文本),并接受默认值。它们使用命名空间(想想“部分”)以方便阅读。
以上配置下,getconf将按以下顺序检查以下选项来尝试提供db.host(它会在找到第一个定义的值时停止)
如果已定义,则从环境变量MYPROJ_DB_HOST获取
从./local_settings.ini中[db]部分的host键获取
从/etc/myproj/settings.ini中[db]部分的host键获取
从默认提供的值,'localhost'获取
功能
- 基于环境的配置文件
可以通过MYPROJ_CONFIG提供额外的配置文件/目录/glob;它优先于其他文件
- 默认选项
可以将额外的字典作为ConfigGetter(defaults=some_dict)提供;它在配置文件和环境变量之后使用。
它应该是一个将部分名称映射到键值对的字典
>>> config = ConfigGetter('myproj', defaults={'db': {'host': 'localhost'}}) >>> config.getstr('db.host') 'localhost'
- 类型获取器
getconf可以将选项转换为几种标准类型
config.getbool('db.enabled', False) config.getint('db.port', 5432) config.getlist('db.tables') # Expects a comma-separated list config.getfloat('db.auto_vacuum_scale_factor', 0.2) config.gettimedelta('account_activation.validity', '2d') config.getpath('django.static_root', pathlib.Path(BASE_DIR / 'static'))
getconf还可以将选项转换为基于用户定义的标准类型的类型
class Environment(str, enum.Enum): DEV = 'dev' PROD = 'prod' config.getenum('environment', Environment.PROD)
概念
getconf依赖于几个关键概念
- 命名空间
每个ConfigGetter在特定的命名空间中工作(其第一个参数)。
其目的是避免在读取环境时出错:使用ConfigGetter(namespace='myproj'),只读取以MYPROJ_开头的环境变量。
但是,可以通过使用ConfigGetter(namespace=getconf.NO_NAMESPACE)来禁用命名空间。
- 部分
一个项目的配置选项通常增长得相当多;为了限制复杂性,getconf将值分为部分,类似于Python的configparser模块。
根据实际的配置源,部分的处理方式不同
section.key映射到环境变量的MYPROJ_SECTION_KEY
section.key映射到配置文件中的[section] key =
section.key映射到默认字典中的defaults['section']['key']
- 默认部分
一些设置实际上是项目的“全局”设置。这通过未设置的分区名称来处理
key映射到环境变量的MYPROJ_KEY
key映射到配置文件中的[DEFAULT] key =
key映射到默认字典中的defaults['DEFAULT']['key']
项目详细信息
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。