You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:45:47