一个简单的Python配置管理器,支持键入。

config-man的Python项目详细描述


配置人

Config-Man是python项目的配置管理器。它帮助您在中处理项目的运行时配置 简单而干净的方法。它还支持多个配置源,如json file环境变量硬编码默认值,等等

安装

只需使用pip安装:

pip install config-man

请记住,Config-Man使用Python type annotations (PEP 484),并且 f-Strings (PEP 498)所以您需要python3.6或更高版本。在

使用

定义配置

在Config-Man中,配置是使用configman.ConfigMan中的子类定义的。 在这个类中,配置是带有type hints的静态成员。在

当前Config-Man只支持基元(bool、int、float、str)和configman.ConfigMan的子类型:

^{pr2}$

要创建嵌套配置(对于更有组织的代码),只需执行以下操作:

fromconfigmanimportConfigManclassLoggingConfig(ConfigMan):log_level:strclassConfig(ConfigMan):port:intlogging:LoggingConfig

您可以在定义期间添加默认值,只需为其指定一个值:

fromconfigmanimportConfigManclassServerConfig(ConfigMan):port:int=80log_level:str="error"

加载配置

首先,您需要创建主配置的实例:

config=Config()

配置源

然后你需要告诉它在哪里寻找配置。ConfigMan支持多个配置源。目前 支持硬编码的环境变量、json配置文件和参数。如果您需要配置源 配置人不支持随意打开问题。在

1。硬编码

除了在配置定义期间设置的默认值外,您还可以在配置加载期间添加其他默认值 只需为其指定默认值即可进行处理:

config.port=443
2。环境变量

配置人可以从环境变量中读取配置。在

使用env作为源的一种方法是将特定的env分配给配置:

config.set_env("logging.log_level")

默认情况下,变量路径中的所有点“.”将被双精度分数“uu”替换,因此logging.log_level将 由logging__log_level的值填充。在

也可以为环境设置特定的名称:

config.set_env("logging.log_level","LOG_LEVEL")

另一种方法是告诉配置人员从env加载所有可能的配置

config.set_auto_env()

为了避免不同程序之间发生冲突,可以向所有环境添加前缀(在auto_env中):

config.set_auto_env("MY_PROGRAM")

现在当您加载配置时,config Man尝试读取MY_PROGRAM__PORT和{}并将 将它们的值转换成相应的变量。在

3。配置文件

目前Config-Man只支持json配置文件。可以使用以下方法设置配置文件:

config.set_config_file("config.json")
4。参数

您可以使用以下命令告诉配置人员从参数中读取特定配置:

importargparseparser=argparse.ArgumentParser()config.set_arg("logging.log_level","log_level",parser)

Config-Man自动向解析器添加所需的参数。如果需要,还可以定义actionhelp和{}。在

加载配置

最后,您可以通过调用以下命令加载配置本身:

config.load()

默认情况下,来自文件的configs覆盖env中的config和args中的config覆盖所有其他内容。在

如果你想用不同的方式来做事情,你可以运行load_from_envload_from_file和{} 你可以随心所欲。在

创建空配置文件

如果要创建空配置文件,可以使用to_dict

importjsonconfig=Config()withopen("config.json","w")asf:json.dump(f,config.to_dict(),indent=2)

这边配置.json将包含一个空的配置供您填充。在

完整示例

importargparsefromconfigmanimportConfigManclassLoggingConfig(ConfigMan):log_level:str="error"classConfig(ConfigMan):port:intlogging:LoggingConfigconfig=Config()parser=argparse.ArgumentParser()config.port=443config.set_auto_env("MY_PROGRAM")config.set_env("logging.log_level","LOG_LEVEL")config.set_config_file("config.json")config.set_arg("logging.log_level","--log_level","-l",parser)args=parser.parse_args()config.load(args)

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

推荐PyPI第三方库


热门话题
java随机填充2d数组   java运行时。getRuntime。带有长参数的exec(cmd)   java Minecraft无法放置自定义背景   java AChartEngine YAxis自定义标签区域边距和图表值为字符串?   泛型类的java类型安全错误   整数的java符号等价物。toBinaryString方法?   Java中数组列表的数组   java WebView应用程序在谷歌登录后显示空白屏幕   java从backback中删除特定片段   如果服务器不支持使用的协议,java JSSE是否实现回退?   java Sonarqube正在进行核心漏洞查找。如何解决   javajavax。jcr。UnsupportedPositionOperationException:testVersionable处的节点不可版本化   java在安卓中每隔X小时运行一次文件/函数,无需打开应用程序   java如何为磁盘持久性配置BigMemory?   java BufferWriter不转换383以上的整数   Java7交集类型:规范具体说明了什么?   Java:CollectionHow创建多列   java如何检测运算符的空白   java问题:在firebase中为导航栏中的第二个表单提交数据第一个表单工作正常。实际isse是连接Mainactivity中的另一个活动