处理多源分布式配置的包

distribute-config的Python项目详细描述


分发配置

License: MITMaintainabilityCoverage StatusBuild Status

处理多源分布式配置的包

这个包处理python中的多源配置问题。对于包含一组配置变量的python程序, 此包将通过查找yaml配置文件来填充这些配置变量的值,然后将覆盖 变量通过查找匹配的环境变量,然后,如果程序是用一些参数启动的,则将通过加载这些变量再次覆盖配置值

此外,这个包允许您在多个python文件中定义配置变量,使用名称空间系统,这样您就不会意外地破坏配置的其他部分,因此配置保持在需要它的代码附近,您可以通过导入新的python文件来更新配置。

示例

让下面的python程序app.py:

fromdistribute_configimportConfigConfig.define_int("nb",1,"some number")Config.define_str_list("list",["a","b","c"],"some list")Config.define_enum("logger","debug",["info","debug","warn"],"the logger level")Config.load_conf()print(Config.get_dict())

使用python app.py运行它将创建一个文件config.yml:

list:
- a
- b
- c
nb: 1
logger: debug

显示:{'nb': 1, 'list': ['a', 'b', 'c'], 'logger' : 'debug'}

现在如果我们更新config.yml:

list:
- a
- b
nb: 2
  • python app.py将打印{'nb': 2, 'list': ['a', 'b']}
  • NB=3 python app.py将打印{'nb': 3, 'list': ['a', 'b']}
  • NB=3 python app.py --nb 4将打印{'nb': 4, 'list': ['a', 'b']}

此外,python app.py --help显示所有可能的变量和有用的注释

示例2:命名空间

将app.py更改为:

fromdistribute_configimportConfigConfig.define_int("nb",1,"some number")withConfig.namespace("set1"):Config.define_int("nb",2,"some other number")withConfig.namespace("set2"):Config.define_int("nb",3,"and again")Config.define_int("other.nb",4,"last")Config.load_conf()print(Config.get_dict())

运行python app.py将显示{'nb': 1, 'set1': {'nb': 2, 'set2': {'nb': 3}}, 'other': {'nb': 4}} 创建的config.yml是:

nb: 1
other:
  nb: 4
set1:
  nb: 2
  set2:
    nb: 3
  • python app.py将打印{'nb': 1, 'set1': {'nb': 2, 'set2': {'nb': 3}}, 'other': {'nb': 4}}
  • SET1__SET2__NB=30 python app.py将打印{'nb': 1, 'set1': {'nb': 2, 'set2': {'nb': 30}}, 'other': {'nb': 4}}
  • SET1__SET2__NB=30 python app.py --set1.set2.nb=40将打印{'nb': 1, 'set1': {'nb': 2, 'set2': {'nb': 40}}, 'other': {'nb': 4}}

功能

  • 配置支持单个变量(int、float、str、bool),也支持list(int、float、str)和enum
  • 使用config.load_conf()加载配置时,可以指定要创建或加载的配置文件的名称,还可以指定不希望创建配置文件还是要更新当前配置文件的内容(添加新功能时使用)

测试

鼻测试-V

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

推荐PyPI第三方库


热门话题
java需要设置框架。可设置大小(false)以重新绘制()   java我对PDF文件感到困惑   为什么是太阳。jvm。热点。调试器。DebuggerException:无法打开二进制文件`?   设置结果为textview时出现java空指针异常   我应该使用什么同步原语在Java中实现事件驱动程序框架?   java为什么WindowClosing处理程序在退出程序之前不执行后台任务?   如何将“20170712T18:43:04.000Z”转换为安卓或java中的相对时间?   Java,获取按键的时间长度,currentTimeMillies()始终为24   maven构建的java可执行Jar找不到logback。xml   java在其外部的函数中使用for循环中的值   java如何以表格格式将不同长度的数据对齐   java Play 2.5 WebSocket连接构建   maven而非eclipse的java强制转换问题   java如何在JFreeChart中使X轴上的值水平?   构建Java Windows应用程序以访问在线MySQL数据库需要什么   java添加构造函数会出错吗?这没有道理,请帮忙,编程问题   java在一个jframe中的两个JPanel中使用两个绘制方法   java数学或逻辑问题   java如何复制Androids库存摄像头方向更改