使用Dynaconf加载设置 - Python 3.10与3.11的不同表现
我正在使用Dynaconf 3.2.5来从多个文件中加载项目设置。当我在Python 3.10.9中运行这段代码时,一切都正常,但在使用3.11.1时,设置却没有加载。
以下是代码的一些主要部分。
DEFAULT_CONFIG_DIR = Path(__file__).parent / 'config'
class Config(BaseModel):
class FileFormats(str, Enum):
"""Supported configuration file formats."""
TOML = 'toml'
YAML = 'yaml'
JSON = 'json'
INI = 'ini'
ENV = 'env'
config_dir: DirectoryPath = Field(
DEFAULT_CONFIG_DIR,
description='The directory containing the configuration files.',
)
recursive: bool = Field(
True,
description='If True, load config files from subdirectories.',
)
use_file_formats: Annotated[
list[FileFormats],
Field(
[FileFormats.TOML, FileFormats.YAML],
min_length=1,
description='The file formats to use for loading configuration parameters.',
),
]
_params: Dynaconf | None = None
@computed_field # type: ignore[misc]
@cached_property
def params(self) -> Dynaconf:
if self._params is None:
self._params = self._load_params()
return self._params
def _load_params(self) -> Dynaconf:
assert self._params is None
if not self.config_dir.exists():
raise FileNotFoundError(
f'Config directory {self.config_dir} does not exist.'
)
# Find the list of configuration files to load
settings_files: list[DirectoryPath | str] = []
for file_format in self.use_file_formats:
if self.recursive:
settings_files += list(self.config_dir.rglob(f'*.{file_format}'))
else:
settings_files += list(self.config_dir.glob(f'*.{file_format}'))
return Dynaconf(
# envvar_prefix=False,
merge_enabled=True,
# environments=False,
settings_files=settings_files,
)
这段代码在Python 3.10中运行得很好。当我在Python 3.11中运行时,代码是可以执行的,但文件中的数据实际上并没有被加载。我不太确定为什么会这样。
1 个回答
0
这是个很傻的错误,我用了 file_format
而不是 file_format.value
。我被这个问题搞糊涂了,因为在3.10版本中它是可以正常工作的。