YAML 配置文件未在 dyanconf 设置中加载

Posted

技术标签:

【中文标题】YAML 配置文件未在 dyanconf 设置中加载【英文标题】:YAML config file is not loaded in dyanconf settings 【发布时间】:2020-09-30 09:23:36 【问题描述】:

这是我的项目结构:

project/
   src/
      settings.py
   examples/
      example-config.yaml
# settings.py
OUTPUT_DIR = "generated"
# example-config.yaml
OUTPUT_DIR: "custom_dir"

根据文档settings.py 会自动加载。因此下面的代码有效:

from dynaconf import settings
print(settings.OUTPUT_DIR) # prints -> generated

但是,当尝试加载 example-config.yaml 时,没有任何变化。见下文:

from dynaconf import settings
settings.load_file("../examples/example-config.yaml")
print(settings.OUTPUT_DIR) # prints -> generated. expected -> custom_dir

我错过了什么吗?

【问题讨论】:

【参考方案1】:

你应该明确设置导入的根目录,我遇到了类似的问题,找不到配置文件,dynaconf 默默地抑制了所有错误。

对于较旧的 Dynaconf,您可以将 ROOT_PATH_FOR_DYNACONF 环境变量设置为项目的基本路径。

对于 Dynaconf 版本 > 3,建议您自己制作一个 Dynaconf 实例。你应该在那里设置root_path

config.py 文件:

from dynaconf import Dynaconf

settings = Dynaconf(root_path="/path/to/project")

那么就可以使用相对导入了。

from project.config import settings

settings.load_file("examples/example-config.yaml")

【讨论】:

【参考方案2】:

OUTPUT_DIR = "custom_dir"

在 YAML 中是一个单一的标量,而不是字典。您想使用正确的 YAML 语法,即

OUTPUT_DIR: custom_dir

【讨论】:

其实我的问题是一个错误。 yaml文件实际上是正确的。我修复了错误。问题仍然存在。 另外,由于 dynaconf 使用 PyYaml,它会检测语法问题。所以我确信我的文件中没有语法问题。

以上是关于YAML 配置文件未在 dyanconf 设置中加载的主要内容,如果未能解决你的问题,请参考以下文章

Ruby 在与源相同的目录中加载配置(yaml)文件

静态 CSS 文件未在 Django 框架中加载

NSUserDefaults 未在 IOS4 中加载

子路由模块未在同一页面中加载内容

bootstrap.yml 未在 Spring Boot 2 中加载

环境目录中的 database.php 文件未在 Laravel 4 中加载