dirtyhand-tester python 开箱即用配置管理-dynaconf
simonpatrick
·
2023年08月31日
·
3111 次阅读
python 开箱即用配置管理-dynaconf
dynaconf: Configuration Management for Python.
python 配置文件
配置文件的用途:
配置和代码分离,不同环境只修改配置即可
自己写获取配置文件方法: 有点小麻烦
- 读取文件
- 解析数据,可能还不同格式
- .......
dynaconf 优势
- 开箱即用
- 支持多格式
toml|yaml|json|ini|py
- 基本功能实用方便,同时又支持很多复杂配置
dynaconf- 配置文件
配置文件 settings.toml
[default]
DB_NAME = "mydb.db"
a_dict = { hello = "world" }
[development]
DB_PATH = "@format {env[HOME]}/{this.DB_NAME}"
name = "developer"
[test]
DB_PATH = "@format {env[HOME]}/{this.DB_NAME}"
name = "test"
[production]
name = "admin"
dynaconf 使用 - 开箱即用
初始化:自动读取 settings.toml 配置信息
qSettings = Dynaconf(
settings_files=["settings.toml", ".secrets.toml"],
environments=True,
load_dotenv=True,
)
qSettings.validators.validate()
print("settings is loaded")
dynaconf 优势 - 使用直接
如何从上面的 settings 文件中获取值:
# 直接读取
def test_config_default_value():
assert qSettings.DB_NAME == "mydb.db"
- settings.<属性名> 可以直接获取
- 支持嵌套属性:
settings.a_dict.hello
4. 支持多个环境不同配置,development/test/production
dynaconf 优势 - 嵌套值
从上面的 settings 文件中获取嵌套值: settings.a_dict.hello
def test_config_default_nested_value():
print(qSettings.a_dict)
assert qSettings.a_dict.hello == "world"
dynaconf 优势 - 不同环境的值
不同环境的值:name, 通过.env 文件配置
def test_config_environment_setting():
assert qSettings.name == "developer"
dynaconf 小结
- 开箱即用,基本功能实用
- 不需要二次开发或者适配
dynaconf 可以学习的依赖库
- Box: https://box.readthedocs.io/
- 这个库解决了一个问题,不用
dict[key]
这种方式取值,用dict.key
也可以取值 - 原理可以自己看源码
转载文章时务必注明原作者及原始链接,并注明「发表于 TesterHome 」,并不得对作品进行修改。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。