Как создать файл env

Обновлено: 02.07.2024

Python-dotenv считывает пары "ключ-значение" из файла .env и может задавать их как переменные среды. Это помогает в разработке приложений в соответствии с принципами 12 факторов.

Начало работы

Если ваше приложение берет конфигурацию из переменных среды, например 12-факторное приложение, запускать его в процессе разработки не очень практично, поскольку вам придется устанавливать эти переменные среды самостоятельно.

Чтобы помочь вам в этом, вы можете добавить Python-dotenv в свое приложение, чтобы оно загружало конфигурацию из файла .env, когда он присутствует (например, в процессе разработки), оставаясь при этом настраиваемым через среду:

По умолчанию load_dotenv не переопределяет существующие переменные среды.

Чтобы настроить среду разработки, добавьте .env в корневой каталог вашего проекта:

Синтаксис файлов .env, поддерживаемых python-dotenv, аналогичен синтаксису Bash:

Если вы используете переменные в значениях, убедитесь, что они окружены символами < и >, например $ , поскольку голые переменные, такие как $DOMAIN, не раскрываются.

Возможно, вы захотите добавить .env в свой .gitignore , особенно если он содержит секреты, такие как пароль.

Дополнительную информацию о том, что можно записать в файл .env, см. в разделе "Формат файла" ниже.

Другие варианты использования

Загрузить конфигурацию без изменения среды

Функция dotenv_values ​​работает более или менее так же, как load_dotenv , за исключением того, что она не затрагивает среду, а просто возвращает dict со значениями, проанализированными из файла .env.

Это, в частности, обеспечивает расширенное управление конфигурацией:

Разбирать конфигурацию как поток

load_dotenv и dotenv_values ​​принимают потоки через свой аргумент потока. Таким образом, можно загружать переменные из источников, отличных от файловой системы (например, из сети).

Загрузить файлы .env в IPython

Вы можете использовать dotenv в IPython. По умолчанию он будет использовать find_dotenv для поиска файла .env:

Вы также можете указать путь:

  • -o, чтобы переопределить существующие переменные.
  • -v для большей детализации.

Интерфейс командной строки

Также включен интерфейс командной строки dotenv, который помогает вам управлять файлом .env, не открывая его вручную.

Запустите dotenv --help для получения дополнительной информации об опциях и подкомандах.

Формат файла

Формат не определен официально и со временем совершенствуется. При этом файлы .env должны в основном выглядеть как файлы Bash.

Ключи могут быть без кавычек или в одинарных кавычках. Значения могут быть не в кавычках, в одинарных или двойных кавычках. Пробелы до и после ключей, знаки равенства и значения игнорируются. За значениями может следовать комментарий. Строки могут начинаться с директивы экспорта, что не влияет на их интерпретацию.

Разрешенные управляющие последовательности:

  • в одинарных кавычках: \\ , \'
  • в значениях в двойных кавычках: \\ , \' , \" , \a , \b , \f , \n , \r , \t , \v

Многострочные значения

Значения в одинарных или двойных кавычках могут занимать несколько строк. Следующие примеры эквивалентны:

Расширение переменной

Python-dotenv может интерполировать переменные, используя расширение переменных POSIX.

С помощью load_dotenv(override=True) или dotenv_values() значение переменной является первым из значений, определенных в следующем списке:

  • Значение этой переменной в файле .env.
  • Значение этой переменной в среде.
  • Значение по умолчанию, если указано.
  • Пустая строка.

С load_dotenv(override=False) значение переменной является первым из значений, определенных в следующем списке:

  • Значение этой переменной в среде.
  • Значение этой переменной в файле .env.
  • Значение по умолчанию, если указано.
  • Пустая строка.

Связанные проекты

Благодарности

В настоящее время этот проект поддерживают Саураб Кумар и Бертран Бонфуа-Клоде, и без поддержки этих замечательных людей он был бы невозможен.

Все заметные изменения в этом проекте будут задокументированы в этом файле.

Формат основан на журнале изменений, и этот проект придерживается семантического управления версиями.

[0.20.0] - 24 марта 2022 г.

Добавлено

Исправлено

0.19.2 — 11.11.2021

Исправлено

Добавлено

0.19.0 – 24 июля 2021 г.

Изменено

Добавлено

0.18.0 — 20 июня 2021 г.

Изменено

0.17.1 – 29 апреля 2021 г.

Исправлено

0.17.0 – 02 04 2021

Изменено

Добавлено

0.16.0 — 27 марта 2021 г.

Изменено

0.15.0 – 28 октября 2020 г.

Добавлено

Изменено

Исправлено

0.14.0 — 03.07.2020

Изменено

Исправлено

0.13.0 — 16 апреля 2020 г.

Добавлено

0.12.0 — 28 февраля 2020 г.

Изменено

Исправлено

0,11.0 - 07.02.2020

Добавлено

Изменено

Исправлено

0.10.5 - 19 января 2020 г.

Исправлено

0.10.4 — 17 января 2020 г.

Добавлено

  • Добавить параметр --version в cli (@venthur)
  • Включить загрузку из текущего каталога (@cjauvin)
  • Добавить команду dotenv run для вызова произвольного сценария оболочки с .env (@venthur)
  • Добавить тесты для документов (@Flimm)
  • Сделать поддержку cli необязательной. Используйте pip install python-dotenv[cli] . (@theskumar)
  • Исправить команду dotenv list (@ticosax)
  • Добавить поддержку iPython (@tillahoffmann)
  • Отказ от поддержки Python 2.6.
  • Обрабатывать экранированные символы и символы новой строки в значениях в кавычках. (Спасибо @iameugenejo)
  • Удалите все пробелы вокруг ключа/значения без кавычек. (Спасибо, @paulochf)
  • Добавлено расширение переменных POSIX. (Спасибо @hugochinchilla)
  • Исправлено find_dotenv - теперь он запускает поиск из файла, из которого вызывается эта функция.
  • Добавьте метод find_dotenv, который попытается найти файл .env. (Спасибо @isms)
  • cli: добавлен параметр -q/--quote для управления поведением кавычек вокруг значений в .env . (Спасибо, @hugochinchilla).
  • Улучшенное тестовое покрытие.

Детали проекта

Ссылки на проекты

Статистика

Просмотрите статистику по этому проекту через Libraries.io или с помощью нашего общедоступного набора данных в Google BigQuery

Лицензия: лицензия BSD (пункт BSD-3)

Теги переменные среды, развертывания, настройки, env, dotenv, конфигурации, python

Эта статья основана на Node v16.14.0.

Пакет dotenv позволяет загружать файл .env в проект Node.js, который служит центральным местом для управления переменными среды. Этот подход с одним файлом упрощает обновление и обслуживание переменных среды.

💰 Программист-прагматик: путь к мастерству. 💰 Одна из лучших книг по разработке программного обеспечения, продано более 200 000 раз.

Если вы не знакомы с переменными среды, сначала прочитайте эту статью Переменные среды в Node.js

Настройка и чтение файла .env

Наиболее распространенным решением в мире Node.js является пакет dotenv для управления переменными среды. Вы можете создать файл .env в корневом каталоге приложения, который содержит пары ключ/значение, определяющие необходимые переменные среды для вашего проекта. Затем этот файл .env считывается библиотекой dotenv и добавляется к process.env. Пожалуйста, не фиксируйте файл .env.

Давайте обновим .gitignore , создадим файл .env и прочитаем его за 7 шагов:

  1. Создайте новый файл .env в корневом каталоге проекта.
  1. Прочитайте и используйте переменные среды в .env

Требовать dotenv и вызывать метод config() как можно раньше, обычно это делается в точке входа, например в файле index.js.

Сообщение журнала выводит HOST-PLACEHOLDER-URL , который представляет собой переменную среды, установленную для API_HOST, как определено в файле .env.

При необходимости создайте модуль config.js

Для приложений с большим количеством параметров конфигурации рекомендуется создать отдельный модуль конфигурации. Этот модуль должен быть зафиксирован в системе контроля версий.

Модуль config.js может выглядеть так:

В приведенном выше примере конфигурация из файла .env смешивается, чтобы оставаться специфичной для среды, при этом можно напрямую использовать другие значения конфигурации (например, плагины).

Преимущество этого также заключается в возможности импортировать конфигурации везде, где это необходимо, и использовать деструктурирование для извлечения только необходимых значений. Это делает код намного чище.

Документируйте свое приложение примером файла .env

Файл .env должен быть специфичен для среды и не возвращаться в систему контроля версий. Лучше всего задокументировать файл .env с помощью примера. Этот файл .env.example документирует обязательные переменные для приложения, и его можно зафиксировать в системе управления версиями. Это дает полезную справочную информацию и ускоряет процесс адаптации новых членов команды, поскольку сокращается время на изучение кодовой базы, чтобы выяснить, что нужно настроить.

Пример .env.example может выглядеть следующим образом:

Что происходит с уже существующими переменными среды?

Библиотека dotenv никогда не будет изменять уже установленные переменные среды. Если в вашей среде уже задана переменная, и переменная в файле .env конфликтует с ней, переменная в файле .env будет пропущена.

  • Файл .env необходим для четкого разделения конфигураций среды.
  • Пакет dotenv используется для чтения файла .env во время выполнения, содержащего переменные среды, и добавления их к объекту process.env.
  • Создание примера для файла .env для документирования обязательных переменных, что ускоряет настройку проекта.
  • Никогда не отправляйте файл .env в систему контроля версий.

Спасибо, что прочитали, и если у вас есть какие-либо вопросы, используйте функцию комментариев или отправьте мне сообщение @mariokandut.

Если вы хотите узнать больше о Node, ознакомьтесь с этими учебными пособиями по Node.

Приложения создаются для развертывания. В какой-то момент во время разработки вам нужно будет подумать о среде, в которой будет работать ваше приложение, и о потенциально конфиденциальной или специфичной для среды информации, которая потребуется вашему приложению для выполнения своих задач.

Переменные среды — это один из основных способов, с помощью которых разработчики программного обеспечения предоставляют приложению такого рода информацию, однако локальный запуск и тестирование приложения, которое зависит от переменных среды, может вызвать затруднения, если вы устанавливаете эти переменные в среде вашего локального компьютера. .

Процесс установки или изменения переменной среды занимает много времени, и со временем количество переменных среды, которыми вы должны управлять, выходит из-под контроля. Со временем конфликты имен становятся проблемой, и каждая новая переменная требует длинного префикса, чтобы отличать ее от похожих переменных.

Использование файла .env позволит вам использовать переменные среды для локальной разработки, не загрязняя глобальное пространство имен среды. Кроме того, имена и значения переменных среды будут изолированы от того же проекта, в котором они используются.

Файл .env — это текстовый файл, содержащий пары "ключ-значение" всех переменных среды, необходимых вашему приложению. Этот файл включается в ваш проект локально, но не сохраняется в системе управления версиями, чтобы вы не подвергали риску потенциально конфиденциальную информацию.

Выйти из полноэкранного режима

Почти у каждого языка программирования есть пакет или библиотека, которые можно использовать для чтения переменных среды из файла .env, а не из вашей локальной среды. Для Python эта библиотека называется python-dotenv. После установки библиотеки в среднем случае использования python-dotenv требуется добавить в проект всего две строки кода.

Выйти из полноэкранного режима

load_dotenv() сначала будет искать файл .env, и если он его найдет, он загрузит переменные среды из файла и сделает их доступными для вашего проекта, как и любая другая переменная среды.

Выйти из полноэкранного режима

Если переменная среды не найдена в файле .env, load_dotenv будет искать переменную по заданному имени в среде хоста. Это означает, что когда ваш проект выполняется локально и присутствует файл .env, будут использоваться переменные, определенные в файле. Когда ваш проект развертывается в хост-среде, такой как виртуальная машина или контейнер Docker, где файл .env отсутствует, вместо него будут использоваться переменные среды, определенные в хост-среде.

По умолчанию load_dotenv будет искать файл .env в текущем рабочем каталоге или любых родительских каталогах, однако вы также можете указать путь, если ваш конкретный вариант использования требует его хранения в другом месте.

Выйти из полноэкранного режима

Для большинства приложений это вся информация, необходимая для эффективной работы с python-dotenv, однако есть несколько дополнительных функций, о которых вы можете прочитать в python-dotenv документация.

Одним из преимуществ использования файла .env является то, что его становится намного проще разрабатывать с учетом переменных среды на ранних этапах. Размышление об этих вещах на более ранней стадии процесса разработки облегчит вам подготовку приложения к развертыванию.

Если вы развертываете приложение в контейнере Docker, вы можете легко перейти к запуску и тестированию приложения в локальном контейнере, используя флаг --env-file .env с командой запуска docker. Затем Docker установит те же переменные среды, которые вы использовали с помощью python-dotenv в среде контейнера.

Без файла .env переменные среды являются громоздкой, хотя и необходимой частью локального тестирования приложения. Благодаря файлу .env и библиотеке python-dotenv работа с переменными среды становится намного более управляемой, и вы с самого начала будете разрабатывать с учетом развертывания.

Есть несколько частей Compose, которые в том или ином смысле имеют дело с переменными среды. Эта страница должна помочь вам найти нужную информацию.

Замена переменных среды в файлах Compose

В вашей оболочке можно использовать переменные среды для заполнения значений внутри файла Compose:

Если у вас есть несколько переменных среды, вы можете заменить их, добавив их в файл переменных среды по умолчанию с именем .env или указав путь к файлу переменных среды с помощью параметра командной строки --env-file.

Параметры конфигурации могут содержать переменные среды. Compose использует значения переменных из среды оболочки, в которой запускается docker-compose. Например, предположим, что оболочка содержит POSTGRES_VERSION=9.3, и вы указываете следующую конфигурацию:

Когда вы запускаете docker-compose up с этой конфигурацией, Compose ищет переменную среды POSTGRES_VERSION в оболочке и подставляет ее значение. В этом примере Compose преобразует образ в postgres:9.3 перед запуском конфигурации.

Если переменная среды не задана, Compose заменяет ее пустой строкой. В приведенном выше примере, если POSTGRES_VERSION не задан, значение параметра изображения равно postgres: .

Вы можете установить значения по умолчанию для переменных среды, используя файл .env, который Compose автоматически ищет в каталоге проекта (родительская папка вашего файла Compose). Значения, установленные в среде оболочки, переопределяют значения, установленные в файле .env.

Примечание при использовании развертывания стека docker

Функция файла .env работает только при использовании команды docker-compose up и не работает с развертыванием стека docker.

Поддерживается синтаксис $VARIABLE и $. Кроме того, при использовании формата файла 2.1 можно указать встроенные значения по умолчанию, используя стандартный синтаксис оболочки:

  • $ принимает значение по умолчанию, если переменная VARIABLE не задана или пуста в среде.
  • $ принимает значение по умолчанию только в том случае, если переменная VARIABLE не установлена ​​в среде.

Аналогично следующий синтаксис позволяет указывать обязательные переменные:

  • $ завершается с сообщением об ошибке, содержащим err, если переменная VARIABLE не установлена ​​или пуста в среде.
  • $ завершается с сообщением об ошибке, содержащим err, если переменная VARIABLE не установлена ​​в среде.

Другие расширенные функции оболочки, такие как $ , не поддерживаются.

Вы можете использовать $$ (знак двойного доллара), если в вашей конфигурации требуется буквальный знак доллара. Это также не позволяет Compose интерполировать значение, поэтому $$ позволяет вам ссылаться на переменные среды, которые вы не хотите обрабатывать в Compose.

Если вы забудете и используете один знак доллара ( $ ), Compose интерпретирует значение как переменную среды и предупреждает вас:

Файл «.env»

Вы можете установить значения по умолчанию для любых переменных среды, указанных в файле Compose или используемых для настройки Compose, в файле среды с именем .env . Путь к файлу .env выглядит следующим образом:

  • Начиная с версии +v1.28 файл .env помещается в начало каталога проекта
  • Каталог проекта можно явно указать с помощью параметра --file или переменной среды COMPOSE_FILE. В противном случае это текущий рабочий каталог, в котором выполняется команда docker compose ( +1.28 ).
  • В предыдущих версиях могли возникнуть проблемы с разрешением файла .env с --file или COMPOSE_FILE . Чтобы обойти это, рекомендуется использовать --project-directory , который переопределяет путь к файлу .env. Это несоответствие устранено в +v1.28 путем ограничения пути к файлу каталогом проекта.

При запуске docker-compose up определенная выше веб-служба использует образ webapp:v1.5 . Вы можете проверить это с помощью команды config, которая распечатает вашу разрешенную конфигурацию приложения в терминал:

Значения в оболочке имеют приоритет над значениями, указанными в файле .env.

Если вы установите для TAG другое значение в своей оболочке, подстановка в изображении будет использовать его:

Вы можете переопределить путь к файлу среды с помощью аргумента командной строки --env-file .

Использование опции «--env-file»

Передав файл в качестве аргумента, вы можете сохранить его где угодно и дать ему соответствующее имя, например, .env.ci , .env.dev , .env.prod . Передача пути к файлу осуществляется с помощью параметра --env-file:

Этот путь к файлу относится к текущему рабочему каталогу, в котором выполняется команда Docker Compose.

Файл .env загружается по умолчанию:

Передача аргумента --env-file переопределяет путь к файлу по умолчанию:

Когда в качестве аргумента --env-file передается неверный путь к файлу, Compose возвращает ошибку:

Дополнительную информацию см. в разделе "Подстановка переменных" в справочнике по файлам Compose.

Установка переменных среды в контейнерах

Вы можете установить переменные среды в контейнерах службы с помощью ключа «environment», как и с помощью docker run -e VARIABLE=VALUE . :

Передать переменные среды в контейнеры

Вы можете передавать переменные среды из вашей оболочки прямо в контейнеры службы с помощью ключа "environment", не присваивая им значения, как в случае с docker run -e VARIABLE . :

Значение переменной DEBUG в контейнере берется из значения той же переменной в оболочке, в которой запущен Compose.

Опция конфигурации «env_file»

Вы можете передать несколько переменных среды из внешнего файла в контейнеры службы с помощью параметра env_file, как и в случае с docker run --env-file=FILE . :

Установите переменные среды с помощью команды «docker-compose run»

Подобно docker run -e , вы можете установить переменные среды в одноразовом контейнере с помощью docker-compose run -e :

Вы также можете передать переменную из оболочки, не присваивая ей значения:

Значение переменной DEBUG в контейнере берется из значения той же переменной в оболочке, в которой запущен Compose.

Когда вы устанавливаете одну и ту же переменную среды в нескольких файлах, вот приоритет, используемый Compose для выбора используемого значения:

  1. Создать файл
  2. Переменные среды оболочки
  3. Файл среды
  4. Файл Docker
  5. Переменная не определена

В приведенном ниже примере мы устанавливаем одну и ту же переменную среды в файле Environment и в файле Compose:

При запуске контейнера переменная среды, определенная в файле Compose, имеет приоритет.

Наличие любого параметра ARG или ENV в Dockerfile оценивается, только если нет записи Docker Compose для среды или env_file .

Особенности контейнеров NodeJS

Если у вас есть запись package.json для script:start как NODE_ENV=test node server.js , то это отменяет любые настройки в вашем docker-compose.yml файл.

Настройка Compose с использованием переменных среды

Для настройки поведения командной строки Docker Compose доступно несколько переменных среды. Они начинаются с COMPOSE_ или DOCKER_ и задокументированы в переменных среды CLI.

wemake.services

dump-env берет файл .env.template и некоторые необязательные переменные среды для создания нового файла .env из этих двух источников. Внешние зависимости не используются.

Зачем нам нужен такой инструмент? Ну, этот инструмент очень полезен, когда ваш CI создает образы Docker (или другие). Раньше у нас была сложная логика шифрования и дешифрования файлов, импорт секретных ключей и так далее. Теперь мы можем просто создать секретные переменные для нашего CI, добавить к нему префикс и использовать dump-env, чтобы упростить себе жизнь.

Установка¶

Быстрый старт¶

Эта короткая демонстрация продемонстрирует основное и единственное назначение dump-env:

Эта команда:

проанализировать его ключи и значения

прочитать все переменные среды, начиная с SECRET_ENV_

удалить этот префикс

смешайте все вместе, переменные среды могут переопределить переменные из шаблона

отсортировать ключи в алфавитном порядке

сбросить все ключи и значения в файл .env

Расширенное использование¶

Несколько префиксов¶

Эта команда делает то же самое, что и с одним префиксом. Но он заменит несколько префиксов. Последующие префиксы всегда заменяют предыдущие, если они совпадают. Например:

Строгие переменные окружения¶

Если вы хотите быть уверены, что YOUR_VAR существует в вашей среде при создании дампа, вы можете использовать флаг --strict:

Упс! Мы забыли его создать! Теперь это будет работать:

Можно указать любое количество флагов --strict. Больше никаких забытых переопределений шаблонов или отсутствующих переменных env!

Исходные шаблоны¶

Вы можете использовать шаблон env в качестве исходного шаблона, используя аргумент -s или --source. Это ограничит любые переменные без префикса, найденные в среде, только теми, которые уже определены в вашем шаблоне.

Вы также можете использовать префиксы для добавления дополнительных переменных из среды

Строгий источник¶

Использование флага --strict-source имеет тот же эффект, что и определение флага --strict для каждой переменной, определенной в исходном шаблоне.

Создание секретных переменных в некоторых ЭК¶

Реальное использование¶

Проекты, использующие этот инструмент в производственной среде:

Связанные¶

Вас также может заинтересовать:

Лицензия¶

Справочник по API¶

dump ( шаблон: str = '', префиксы: необязательный [список [str]] = None, strict_keys: необязательный [Set [str]] = None , source : str = '' , strict_source : bool = False ) → Dict [str , str ] [source] ¶

Эта функция используется для создания дампа файлов .env.

В качестве источника вы можете использовать оба: 1. файл env.template ( '' по умолчанию) 2. env vars с некоторым префиксом ( '' по умолчанию)

template — путь к файлу шаблона .env, используйте пустую строку, если файла шаблона нет.

prefixes — список строковых префиксов для использования только определенных переменных env, может быть пустой строкой для использования всех доступных переменных.

strict_keys — список ключей, которые должны быть представлены в переменных env.

source — путь к файлу .файл шаблона env, определяет базовый список переменных окружения, которые должны быть проверены, отключает выборку переменных окружения без префикса, используйте пустую строку, когда нет исходного файла.

strict_source — должны ли все ключи в исходном шаблоне также быть представлены в env vars.

Упорядоченные пары ключ-значение из дампа env и переменных шаблона.

StrictEnvError — когда какая-то переменная из шаблона отсутствует.

Читайте также: