python dynaconf 初步学习多环境environments(toml文件)
最近由于测试环境与布署环境配置上的存在差别,老是手动改,实在麻烦,故尝试找下有没有合适的方案。初试dynaconf, 它在设计时候就考虑了多环境的问题。当前网上文章介绍的少,故在此记下初步使用的一些尝试:
读取多个toml文件
configs/setting.toml 随意
[java_server]
host = "192.168.0.2222"
port = 8089
configs/hello.toml 随意
world = "good start!"
conf.py 随意起
from dynaconf import Dynaconf
settings = Dynaconf(
settings_files=['configs/settings.toml', 'configs/hello.toml'],
)
JAVA_IP = settings.java_server.host
test = settings.world
print(JAVA_IP, test)
隔离多个环境
configs/base.toml
[default]
DB_NAME = "mydb.db"
a_dict = { hello = "world" }
bbc = "bbc"
[java_server]
host = "192.168.0.2222"
port = 8089
configs/other.toml 随意名字
[other]
name = "other"
[java_server]
desc = "java服务器的配置说明(可以跨文件读)"
test.py 好好测一下
from dynaconf import Dynaconf
import os
# 如果不设置,默认是 os.environ["ENV_FOR_DYNACONF"] = "default"
settings = Dynaconf(
root_path="configs", # 也可以这里指定路径
settings_files=["base.toml", "other.toml"],
environments=True,
load_dotenv=True,
)
settings.validators.validate()
print(settings.bbc)
# print(settings.host) 可以试一下,这里会报错
# print(settings.java_server.host) # 可以试一下,这里会报错
# 设置环境变量,当前无法像之前一样使用,需要将 java_server 设成环境
os.environ["ENV_FOR_DYNACONF"] = "java_server"
settings.reload() # 记得重新加载
print(settings.host) # 这下可以用了
print(settings.bbc) # bbc 在 default也可以用的哦
print(settings.desc) # 跟文件在other.toml得到的
os.environ["ENV_FOR_DYNACONF"] = "other"
settings.reload() # 记得重新加载
print(settings.name)
print(settings.bbc) # 打印出abc, 因为default的bbc被other的bbc覆盖了
至此可以得出, environments=True,原来的首层的[xxx],已经成为了环境空间,而[default]则是一个特殊的,是一个可以被承继的基础环境。