Python-dotenv считывает пары ключ-значение из файла .env
и может устанавливать их в качестве переменных среды. Это помогает в разработке приложений по принципу 12 факторов.
pip install python-dotenv
Если ваше приложение берет свою конфигурацию из переменных среды, как 12-факторное приложение, запускать его в разработке не очень практично, поскольку вам придется устанавливать эти переменные среды самостоятельно.
Чтобы помочь вам в этом, вы можете добавить Python-dotenv в свое приложение, чтобы оно загружало конфигурацию из файла .env
, когда он присутствует (например, в разработке), оставаясь при этом настраиваемым через среду:
from dotenv import load_dotenv
load_dotenv () # take environment variables
# 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
в том же каталоге, что и скрипт Python, или ищет его постепенно выше.
Чтобы настроить среду разработки, добавьте .env
в корневой каталог вашего проекта:
.
├── .env
└── foo.py
Синтаксис файлов .env
поддерживаемых python-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": "[email protected]"}
Это, в частности, обеспечивает расширенное управление конфигурацией:
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_dotenv
и dotenv_values
принимают потоки через свой аргумент stream
. Таким образом, можно загружать переменные из источников, отличных от файловой системы (например, из сети).
from io import StringIO
from dotenv import load_dotenv
config = StringIO ( "USER=foo n [email protected]" )
load_dotenv ( stream = config )
Вы можете использовать dotenv в IPython. По умолчанию для поиска файла .env
будет использоваться find_dotenv
:
% 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 [email protected]
$ dotenv list
USER=foo
[email protected]
$ dotenv list --format=json
{
" USER " : " foo " ,
" EMAIL " : " [email protected] "
}
$ dotenv run -- python foo.py
Запустите dotenv --help
для получения дополнительной информации о параметрах и подкомандах.
Формат официально не определен и со временем совершенствуется. При этом файлы .env
в основном должны выглядеть как файлы Bash.
Ключи могут быть без кавычек или с одинарными кавычками. Значения могут быть заключены в одинарные или двойные кавычки. Пробелы до и после ключей, знаки равенства и значения игнорируются. За значениями может следовать комментарий. Строки могут начинаться с директивы export
, что не влияет на их интерпретацию.
Разрешенные escape-последовательности:
\
, '
\
, '
, "
, a
, b
, f
, n
, r
, t
, v
Значения в одинарных или двойных кавычках могут занимать несколько строк. Следующие примеры эквивалентны:
FOO= " first line
second line "
FOO= " first linensecond line "
Переменная может не иметь значения:
FOO
Это приводит к тому, что dotenv_values
связывает это имя переменной со значением None
(например {"FOO": None}
. load_dotenv
, с другой стороны, просто игнорирует такие переменные.
Не следует путать это с FOO=
, в этом случае переменная связана с пустой строкой.
Python-dotenv может интерполировать переменные, используя расширение переменных POSIX.
При использовании load_dotenv(override=True)
или dotenv_values()
значение переменной является первым из значений, определенных в следующем списке:
.env
. При использовании load_dotenv(override=False)
значение переменной является первым из значений, определенных в следующем списке:
.env
.В настоящее время этот проект поддерживают Саураб Кумар и Бертран Боннефуа-Клоде, и он был бы невозможен без поддержки этих замечательных людей.