Переменные среды python, .env и оболочкиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Переменные среды python, .env и оболочки

Сообщение Anonymous »

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

Код: Выделить всё

DB_PATH=zzz
DB_PASSWORD=zzz
DB_USERNAME=zzz

Код: Выделить всё

.env.customer1

Код: Выделить всё

CLIENT_ID=xxx
CLIENT_SECRET=yyy

Код: Выделить всё

.env.customer2

Код: Выделить всё

export CLIENT_ID=aaa
export CLIENT_SECRET=bbb
Обратите внимание, что .env.customer1 не использует ключевое слово экспорта, тогда как .env.customer2 использует ключевое слово экспорта .
Когда я хочу запустить определенный скрипт, эта конфигурация заставляет меня использовать источник .env && источник .env.CUSTOMER, чтобы убедиться, что я случайно не взаимодействую с неправильный клиент учетная запись/данные/пользователи/и т. д. В оболочке это работает так, как и ожидалось, когда я запускаю echo $DB_PATH $CLIENT_ID, поэтому я знаю, что эти переменные среды bash установлены правильно, независимо от того, использую ли я .env.customer1 или .env.customer2 .
Когда я пытаюсь использовать эти переменные среды в скрипте Python, это действительно сбивает с толку. Например, у меня есть скрипт Python, который выглядит примерно так:

Код: Выделить всё

# my_script.py
import os
import dotenv

dotenv.load_dotenv() # this loads variables from .env file, which I understand
print(os.environ.get("DB_PATH", "no DB_PATH"))
print(os.environ.get("CLIENT_ID", "no CLIENT_ID"))
Когда я запускаю этот скрипт, я вижу следующее:

Код: Выделить всё

$ source .env && source .env.customer1
$ echo $DB_PATH $CLIENT_ID
zzz xxx
$ python my_script.py
zzz
no CLIENT_ID
$
$
$ source .env && source .env.customer2
$ echo $DB_PATH $CLIENT_ID
zzz aaa
$ python my_script.py
zzz
aaa
$
$
$ CLIENT_ID=wtf python my_script.py
zzz
wtf
Насколько я понимаю, переменные в файле .env независимо загружаются с помощью dotenv.load_dotenv(). Но по какой-то причине в os.environ добавляются только экспортированные переменные оболочки. Кто-нибудь знает, почему это так?
Есть ли лучший способ управлять таким рабочим процессом? Есть ли лучший способ использовать пакет dotenv для работы с этими различными переменными среды?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -variables
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»