跳转到主要内容

简单分层加载env文件

项目描述

envfiles: 简单分层加载env文件

所以你已设置应用程序从环境变量中进行配置,太棒了,做得好!

现在你需要确保在运行应用程序之前所有这些变量都存在。env文件是个好东西,对吧?但是等等,它们不可能总是相同的,它们在测试、Docker和本地开发中略有不同... 这很烦人。

但这不是什么大问题,我们只需创建几个env文件并将它们加载... 但在prod中这会失败,因为env文件不会在那里... 我们只能加载存在的文件,但这有点像是一种黑客式的方法...

如果我们可以分层env文件那会怎么样?想象一下一个 base.env

CACHE_ENABLED=1
DATABASE_HOST=localhost
DATABASE_NAME=myapp

一个覆盖它的 test.env

# >> base.env
CACHE_ENABLED=0
DATABASE_NAME=myapp_test

注意第一行 # >> base.env,其中的 # >> 是一个任意前缀,base.env 是一个相对于正在读取的文件的路径。

将envfiles指向您想要加载的文件,并让它解析变量。例如,您可以定义一个环境变量,比如ENV_FILE,包含您想要加载的env文件的相对路径

import envfiles

env_vars = envfiles.load_env_files(os.getenv("ENV_FILE"))
assert env_vars == {
    "CACHE_ENABLED": "0",
    "DATABASE_HOST": "localhost",
    "DATABASE_NAME": "myapp_test",
}

注意envfiles不会对您的os.environ进行操作,也不会尝试解析或序列化变量。输出是一个字符串到字符串的字典,您如何使用它完全取决于您自己。通常,您会将其与os.environ结合,并将其传递给您的应用程序配置解决方案。

例如,如果您使用的是environ-config 💚

import environ
import envfiles
from settings import MyConfig  # your environ-config Config class

env_vars = envfiles.load(os.getenv("ENV_FILE"))

env_vars.update(os.environ)  # actual environment variables have preference
config = environ.to_config(MyConfig, environ=env_vars)

为什么?

主要是挫折感。这个问题我遇到了很多次。我尝试过不同的库,但它们都没有支持分层或虽然支持但以令人惊讶的方式破坏了os.environ

envfiles背后的想法是声明式定义如何加载env文件,并让您使用您想要的任何配置解决方案。

配置是您的应用程序做的第一件事,它应该尽可能快速直接。

替代方案

如果envfiles不是您想要的,这里有一些其他选项您可能想考虑,它们都比envfiles更成熟和功能丰富

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

envfiles-0.1.1.tar.gz (9.9 KB 查看哈希值)

上传时间

构建分发

envfiles-0.1.1-py3-none-any.whl (8.1 KB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面