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

为何Dynaconf无法读取我的settings.toml配置文件?

排查Dynaconf显式初始化后无法读取配置的问题

问题场景

我用Python Dynaconf 3.1.11管理自研包的配置,配置存在包内的settings.toml文件中。最初使用全局默认的settings对象时一切正常:

from dynaconf import settings

my_value = settings.MY_KEY
print(my_value)  # 输出5

settings.toml内容:

[default]
my_key = 5

近期按照新实践,在config.py中显式初始化配置对象:

# config.py
from pathlib import Path
from dynaconf import Dynaconf

settings = Dynaconf(
    envvar_prefix="DYNACONF",
    settings_file="settings.toml",
    root_path=Path(__file__).parent,
)

之后访问settings.MY_KEY时抛出错误:

AttributeError: 'Settings' object has no attribute 'MY_KEY'

排查步骤

  • 验证配置文件是否被加载
    打印已加载的配置文件路径,确认settings.toml是否被识别:

    print(settings.settings_files)
    

    如果输出中没有目标文件路径,说明root_path或settings_file的路径配置错误。

  • 确认路径正确性
    打印root_path的绝对路径,检查settings.toml是否存在于该目录下:

    print(Path(__file__).parent.absolute())
    

    若文件不在该目录,需调整settings_file的路径(比如"../settings.toml")。

  • 检查大小写转换配置
    全局默认的settings对象默认开启了uppercase_read=True,会自动将配置文件中的小写键转换为大写属性供访问。而显式初始化Dynaconf实例时,该参数默认是False,因此只能通过小写键settings.my_key访问。

解决方法

在显式初始化时添加uppercase_read=True参数,保持和全局settings一致的行为:

# config.py
from pathlib import Path
from dynaconf import Dynaconf

settings = Dynaconf(
    envvar_prefix="DYNACONF",
    settings_file="settings.toml",
    root_path=Path(__file__).parent,
    uppercase_read=True  # 添加此参数
)

之后即可正常通过settings.MY_KEY访问配置值。

内容的提问来源于stack exchange,提问作者Tom Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:50:26