为何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
相关产品推荐
相关产品推荐

