Python-dotenv-获取并设置本地和生产服务器中的.env文件中的值为环境变量

python-dotenv从.env并可以将它们设置为环境变量。它有助于遵循以下条件的应用程序开发12-factor原则

快速入门

pip install python-dotenv

如果您的应用程序从环境变量(如12因素应用程序)获取其配置,则在开发中启动它并不是很实际,因为您必须自己设置这些环境变量

为了帮助您做到这一点,您可以将python-dotenv添加到您的应用程序中,使其从.env文件存在时(例如,在开发中),同时保持可通过环境进行配置:

from dotenv import load_dotenv

load_dotenv()  # take environment variables from .env.

# Code of your application, which uses environment variables (e.g. from `os.environ` or
# `os.getenv`) as if they came from the actual environment.

默认情况下,load_dotenv不覆盖现有环境变量

若要配置开发环境,请添加.env在项目的根目录中:

.
├── .env
└── foo.py

的语法.envpython-dotenv支持的文件与Bash相似:

# Development settings
DOMAIN=example.org
ADMIN_EMAIL=admin@${DOMAIN}
ROOT_URL=${DOMAIN}/app

如果在值中使用变量,请确保用{},就像${DOMAIN},作为赤裸裸的变量,如$DOMAIN不会展开

您可能想要添加.env致您的.gitignore,特别是如果它包含密码之类的秘密

请参见下面的“文件格式”一节,了解有关可以在.env文件

其他使用情形

在不更改环境的情况下加载配置

该函数dotenv_values其工作方式与load_dotenv,除非它不接触环境,它只是返回一个dict使用从.env文件

from dotenv import dotenv_values

config = dotenv_values(".env")  # config = {"USER": "foo", "EMAIL": "foo@example.org"}

这显著实现了高级配置管理:

import os
from dotenv import dotenv_values

config = {
    **dotenv_values(".env.shared"),  # load shared development variables
    **dotenv_values(".env.secret"),  # load sensitive variables
    **os.environ,  # override loaded values with environment variables
}

将配置解析为流

load_dotenvdotenv_values接受streams通过他们的stream论点。因此,可以从文件系统以外的源(例如,网络)加载变量

from io import StringIO

from dotenv import load_dotenv

config = StringIO("USER=foo\nEMAIL=foo@example.org")
load_dotenv(stream=config)

在IPython中加载.env文件

您可以在IPython中使用dotenv。默认情况下,它将使用find_dotenv要搜索某个对象,请执行以下操作.env文件:

%load_ext dotenv
%dotenv

您还可以指定路径:

%dotenv relative/or/absolute/path/to/.env

可选标志:

  • -o要覆盖现有变量,请执行以下操作
  • -v以提高冗长程度

命令行界面

CLI界面dotenv也包括在内,它可以帮助您操作.env文件,而无需手动打开它

$ pip install "python-dotenv[cli]"
$ dotenv set USER foo
$ dotenv set EMAIL foo@example.org
$ dotenv list
USER=foo
EMAIL=foo@example.org
$ dotenv run -- python foo.py

dotenv --help有关选项和子命令的详细信息

文件格式

该格式没有正式指定,并且随着时间的推移仍在改进。话虽如此,.env文件应该主要看起来像Bash文件

键可以是无引号的,也可以是单引号的。值可以是无引号的、单引号的或双引号的。键前后的空格、等号和值将被忽略。值后面可以跟注释。行可以以export指令,该指令对它们的解释没有影响

允许的转义序列:

  • 在单引号的值中:\\\'
  • 在双引号的值中:\\\'\"\a\b\f\n\r\t\v

多行值

单引号或双引号的值可以跨多行。以下示例等效:

FOO="first line
second line"
FOO="first line\nsecond line"

变量展开

Python-dotenv可以使用POSIX变量展开来插值变量

使用load_dotenv(override=True)dotenv_values()变量的值是下表中定义的第一个值:

  • 中该变量的值。.env文件
  • 环境中该变量的值
  • 默认值(如果提供)
  • 空字符串

使用load_dotenv(override=False)变量的值是下表中定义的第一个值:

  • 环境中该变量的值
  • 中该变量的值。.env文件
  • 默认值(如果提供)
  • 空字符串

相关项目

确认

此项目当前由Saurabh KumarBertrand Bonnefoy-Claudet如果没有这些人的支持是不可能的awesome
people