Dynaconf多配置加载异常:为何仅读取settings.toml内容?
Dynaconf加载多配置文件问题解决
Dynaconf完全支持加载多个配置文件并合并内容,你遇到的问题核心是第一个配置文件未被正确加载,大概率是路径问题导致的。以下是具体排查和解决步骤:
1. 验证配置文件加载状态
先确认两个配置文件是否都被成功加载,修改config.py添加加载文件打印:
from dynaconf import Dynaconf settings = Dynaconf( envvar_prefix="DYNACONF", settings_files=[ './my_project/config/settings_upd.toml', './my_project/config/settings.toml' ], ) # 打印已加载的文件列表,检查是否包含两个配置文件 print("已加载配置文件:", settings.files_loaded)
运行脚本后,如果输出仅包含settings.toml,说明第一个文件的路径有误。
2. 使用绝对路径加载配置
避免工作目录变化导致的路径失效,基于config.py的位置构建绝对路径:
import os from dynaconf import Dynaconf # 获取当前config.py文件所在目录的绝对路径 current_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接配置文件所在的config目录路径 config_dir = os.path.join(current_dir, "config") settings = Dynaconf( envvar_prefix="DYNACONF", settings_files=[ os.path.join(config_dir, "settings_upd.toml"), os.path.join(config_dir, "settings.toml") ], )
3. 验证合并结果
修改main.py打印完整配置:
from config import settings print("default环境完整配置:", settings.default) print("last_name:", settings.default.last_name) print("name:", settings.default.name)
正常情况下会输出合并后的结果:
default环境完整配置: {'last_name': 'Your Last Name', 'name': 'Your name'} last_name: Your Last Name name: Your name
补充说明
- Dynaconf加载多文件时,后面的文件会覆盖前面文件中相同key的内容,不同key则自动合并。比如两个文件都定义
name,最终会使用settings.toml中的值。 - 默认已开启合并策略,若需自定义可设置
merge_strategy参数(如deep深度合并、override完全覆盖等)。
内容的提问来源于stack exchange,提问作者NineWasps
相关产品推荐
相关产品推荐

