getconf,python项目的通用配置库
getconf的Python项目详细描述
getconf项目为python程序提供简单的配置帮助程序。
它提供了一个简单的api来读取各种配置文件和环境变量:
importgetconfconfig=getconf.ConfigGetter('myproj',['/etc/myproj.conf'])db_host=config.getstr('db.host','localhost')db_port=config.getint('db.port',5432)
除了这个api,getconf的目标是统一开发和生产系统的配置设置, 遵守每个系统中的标准程序:
- 允许在开发系统上配置用户空间
- 允许对连续集成系统进行多种不同配置
- 在传统生产服务器上使用/etc中的标准配置空间
- 为基于云的平台处理基于环境的配置
getconfv1.6以后的版本支持2.7、3.3、3.4、3.5、3.6,并根据两条bsd许可证进行分发。 v1.8.x将是支持2.7和3.3的最新版本。 支持Python2.6的最新版本getconf是v1.5.1。
链接
安装
从PyPI装入包,使用pip:
pip install getconf
或来自github:
git clone git://github.com/Polyconseil/getconf
getconf除了python之外没有外部依赖性。
简介
注意
请参阅reference和 高级用法。
所有配置值都通过getconf.ConfigGetter对象访问:
importgetconfconfig=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',['*'])
所有设置都有类型(默认为文本),并接受默认值。 为了便于阅读,他们使用名称空间(想想“sections”)。
使用上述设置,getconf将尝试通过检查提供db.host。 以下选项按顺序排列(在第一个定义值处停止):
- 从环境变量MYPROJ_DB_HOST,如果定义了
- 从./local_settings.ini的[db]部分中的host键
- 从/etc/myproj/settings.ini的[db]部分中的host键
- 从默认值,'localhost'
功能
- env-based配置文件
- 可以通过MYPROJ_CONFIG提供额外的配置文件/directory/glob; 它优先于其他文件
- 默认选项
一个额外的字典可以作为ConfigGetter(defaults=some_dict)提供; 它在配置文件和环境变量之后使用。
它应该是一个dict,将节名映射到key => value:
的dict>>> config=ConfigGetter('myproj',defaults={'db':{'host':'localhost'}})>>> config.getstr('db.host')'localhost'
- 类型的getter
getconf可以将选项转换为几个标准类型:
config.getbool('db.enabled',False)config.getint('db.port',5432)config.getlist('db.tables')# Expects a comma-separated listconfig.getfloat('db.auto_vacuum_scale_factor',0.2)
概念
getconf依赖于几个关键概念:
- 命名空间
每个ConfigGetter在特定的命名空间(其第一个参数)中工作。
它的目标是在阅读环境时避免错误: 对于ConfigGetter(namespace='myproj'),只有环境变量 以MYPROJ_开头的将被读取。
但是,可以使用 ConfigGetter(namespace=getconf.NO_NAMESPACE)。
- 节
项目的配置选项通常会增长很多; 为了限制复杂性,^ {TT1}$将值分割成部分, 类似于python的configparser模块。
根据实际配置,节的处理方式不同 来源:
- section.key映射到环境变量的MYPROJ_SECTION_KEY。
- section.key映射到配置文件中的[section] key =。
- section.key映射到默认dict中的defaults['section']['key']。
- 默认节
有些设置实际上是projet的“全局”设置。 这由未设置的节名称处理:
- key映射到环境变量的MYPROJ_KEY。
- key映射到配置文件中的[DEFAULT] key =。
- key映射到默认dict中的defaults['DEFAULT']['key']。