У меня есть файл .env, содержащий общие конфигурации для доступа к нашей продукции. сервер. У меня также есть несколько отдельных файлов .env.CUSTOMER, специфичных для конкретного клиента, которые содержат определенные переменные среды для этого клиента. Моя конфигурация выглядит примерно так:
Код: Выделить всё
.env
Код: Выделить всё
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 && источник .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
Есть ли лучший способ управлять таким рабочим процессом? Есть ли лучший способ использовать пакет dotenv для работы с этими различными переменными среды?
Подробнее здесь: https://stackoverflow.com/questions/793 ... -variables