使用python进行简单的配置管理。

python-simpleconf的Python项目详细描述


simpleConf

使用python进行简单的配置管理

安装

# released version
pip install python-simpleconf
# lastest version
pip install git+https://github.com/pwwang/simpleconf

功能

  • 很简单!很简单!很简单!
  • 配置文件切换
  • 支持的格式:
    • .ini/.cfg/.config(使用ConfigParse
    • .env(使用python-dotenv
    • .yaml/.yml(使用pyyaml
    • .toml(使用toml
    • .json(使用json
    • 系统环境变量
    • python词典
  • 值转换

用法

加载配置

fromsimpleconfimportconfig# load a single fileconfig._load('~/xxx.ini')# load multiple filesconfig._load('~/xxx.ini','~/xxx.env','~/xxx.yaml','~/xxx.toml','~/xxx.json','simpleconf.osenv',{'default':{'a':3}})

对于.env配置,变量名使用配置文件名作为前缀。例如:

default_a=1default_b=py:1
test_a=2
config._load('xxx.env')config.a=='1'config.b==1config._use('test')config.a=='2'config._revert()config.a=='1'

使用with临时切换配置文件:

config._load('xxx.env')config.a=='1'config.b==1withconfig._with('test')ascfgconfig.a=='2'config.a=='1'

对于.osenv配置,例如simpleconf.osenv,将只加载名称以SIMPLECONF_开头的变量,然后紧跟大写配置文件名。

os.environ['SIMPLECONF_DEFAULT_A']=1os.environ['SIMPLECONF_test_A']=2config._load('simpleconf.osenv')config.A==1config._use('test')config.A==2

优先级由加载配置的顺序决定。
在上面的例子中,config.A无论如何都是3,不管在先前的配置中分配了什么值。

提示:要使系统环境变量始终具有最高优先级,应始终最后加载它们。

切换配置文件

ConfigParse一样,将首先加载默认配置文件(节)。

[default]a=1b=2[test]a=3
config._load('xxx.ini')config.a==1config.b==2config._use('test')config.a==3config.b==2

注意simpleconf配置文件不区分大小写,我们对第一层配置使用大写名称:

default:complicated_conf:a = 9
config._load('xxx.yaml')config.complicated_conf.a==9

获取配置值

simpleconf.config是来自python-box^{}的实例。ConfigBox支持的所有方法都适用于simpleconf.config
此外,我们还扩展了get方法,允许用户定义cast方法:

config._load('xxx.ini')config.int('A')==1config.float('A')==1.0defversion(x):return'%s.0.0'%xconfig.get('A',cast=version)=='1.0.0'

无配置文件模式

a:1b:2
fromsimpleconfimportConfigconfig=Config(with_profile=False)config._load('xxx.yaml')config.A==1config.B==2

注意,在.ini配置文件中,您仍然必须使用节名[DEFAULT]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java FirebaseInstanceId。getInstance()始终为空   linux Java执行文件错误   javaspringboot:如何使用Ajax在springboot和Thymeleaf中创建进度条?   java禁用在安卓上使用传单时启用setJavaScriptEnabled   java如何在主体中发布原始类型JSON数据?   消除JAVA While循环中的额外输出   如何在java中直接将基本数据类型分配给自定义类   java为什么addNode()方法返回编译错误“类型中的方法…不适用于参数…”,我该如何修复它?   java惰性合成可观察对象   eclipse Java Blackberry位图单击   java Android:AsyncTask对象[]无法在doInBackground中强制转换   java有没有办法重构或改进这段代码?   java如何使用系统以十六进制打印字节。出来普林顿?   多线程如何在我的java聊天室中调试“java.net.UnknownHostException”?   java如何从Google App Engine下载应用程序源文件   java如何在Spring Data Mongo的聚合$group中使用类似$dateToString   java IBM websphere application server未在MyEclipse8中启动。0