better config——一个更好的python配置
betterconfig的Python项目详细描述
betterconfig提供了一种更方便和可扩展的配置语言, 以及一个基于python内置configparser格式的简单接口 有一个非常简单的接口来加载配置。
类型强制样板吸入
像许多配置语言一样,configparser将所有值视为字符串, 也就是说,当您进行如下配置时:
[config] foo = 1 bar = a,list,of,strings baz = just a plain old string
最后得到的样板文件如下:
from ConfigParser import ConfigParser MAP = { 'foo': int, 'bar': lambda x: x.split(','), 'baz': str, } c = ConfigParser() c.read('./foo.cfg') config = {k:MAP[k](v) for k,v in c.items('config')}
你真的不希望这样做:
[config] foo = 1 bar = ['a', 'list', 'of', 'strings'] baz = "just a plain old string"
把地图放下?
import betterconfig config = betterconfig.load('./foo.cfg')['config']
betterconfig支持ast.literal_eval支持的所有文本类型: 字符串、数字、元组、列表、dict、布尔值和none。
配置更灵活,模块
配置不太灵活我们想要一种配置语言,它可以像 django或flask(几乎是可扩展的),但初始化不那么神奇, 比这样的东西稍微安全一些:
import importlib settings = importlib.import_module('settings')
因此,我们需要一个可以执行以下操作的配置:
top_level = 'variables defined outside of sections' include = ['./include.cfg', 'include.d/*.cfg'] [section] namespaced = True
我们不想迭代部分或项,我们只想 将其加载到dict:
import betterconfig settings = betterconfig.load('./fancy.cfg')
如果你真的喜欢.符号,你总是可以做一些事情 愚蠢得像制作一个模块settings.py,它可以做一些神奇的事情,比如:
import betterconfig globals().update(betterconfig.load('./fancy.cfg'))
安装
betterconfig项目位于github,可通过pip获得。
从pip
安装v0.3sudo pip install betterconfig==0.3
从源安装v0.3
curl https://github.com/axialmarket/betterconfig/archive/version_0.3.tar.gz | tar vzxf - cd betterconfig sudo python setup.py install
运行测试
betterconfig测试需要py.test,可以通过pip安装。
sudo pip install pytest==2.5.2 py.test test_betterconfig.py