跳转到主要内容

getconf,适用于Python项目的多功能配置库

项目描述

https://secure.travis-ci.org/Polyconseil/getconf.png?branch=master Latest Version Supported Python versions Wheel status License

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的最后一个版本。

安装

使用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']

项目详细信息


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

getconf-1.11.1.tar.gz (28.2 kB 查看哈希值)

上传时间

构建分布

getconf-1.11.1-py2.py3-none-any.whl (10.4 kB 查看哈希值)

上传时间 Python 2 Python 3

支持