gpt4 book ai didi

python - Dynaconf 使用 .secrets.toml 覆盖 settings.toml 中的部分

转载 作者:行者123 更新时间:2023-12-02 19:10:28 26 4
gpt4 key购买 nike

我正在使用 Dynaconf (3.1.2) 来处理我的 python 应用程序设置。

如果我在 settings.toml.secrets.toml 中使用相同的 key ,则这些部分最后仅包含 secret 文件中的值,而不再包含其他值从设置文件。我该如何处理这个问题?

我有以下设置:

# settings.toml
[smtp]
host = "mail.myserver.com"
port = 587
username = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1a777f5a7763697f686c7f6834797577" rel="noreferrer noopener nofollow">[email protected]</a>"
# .secrets.toml
[smtp]
password = "mysecretpassword"

当我尝试获取 settings.smtp.host 时,出现以下异常:

dynaconf.vendor.box.exceptions.BoxKeyError: "'DynaBox' object has no attribute 'HOST'"

调试时可以看到设置对象:

'SMTP': <Box: {'password': 'mysecretpassword'}>

最佳答案

您需要允许合并。 Dynaconf 将在加载文件时覆盖配置。在您的情况下, settings.toml 的内容将被 .secrets.toml 覆盖因为它是在 settings.toml 之后加载的.

为了避免这种情况,您可以启用 dynaconf_merge .

# settings.toml
[smtp]
host = "mail.myserver.com"
port = 587
username = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="aec3cbeec3d7ddcbdcd8cbdc80cdc1c3" rel="noreferrer noopener nofollow">[email protected]</a>"
# .secrets.toml
[smtp]
dynaconf_merge = true
password = "mysecretpassword"

这将合并您的smtp来自 .secrets.toml 的对象至settings.toml并且不会覆盖。

您还可以启用全局合并,例如

# .secrets.toml
dynaconf_merge = true
[smtp]
password = "mysecretpassword"

这将合并 .secret.toml 中的所有对象到 settings.toml 中具有相同名称的对象

引用:https://www.dynaconf.com/merging/#local-configuration-files-and-merging-to-existing-data

关于python - Dynaconf 使用 .secrets.toml 覆盖 settings.toml 中的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64368571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com