一个简单的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
的子类型:
要创建嵌套配置(对于更有组织的代码),只需执行以下操作:
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自动向解析器添加所需的参数。如果需要,还可以定义action
、help
和{
加载配置
最后,您可以通过调用以下命令加载配置本身:
config.load()
默认情况下,来自文件的configs覆盖env中的config和args中的config覆盖所有其他内容。在
如果你想用不同的方式来做事情,你可以运行load_from_env
,load_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)
- 项目
标签: