Переменные окружения Python (django)

Я работаю с Django и virtualenvwrapper. Моя цель - удалить всю конфиденциальную информацию из файла настроек в соответствии с предложениями приложения 12Factor ( http://12factor.net/) и в конечном итоге развернуть на heroku. При локальном тестировании для достижения этого я создал файл.env с различными значениями переменных, такими как SECRET_KEY. Я пошел в свой каталог virtualenv и добавил следующую строку в сценарий постактивации:

source .env 

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

$ echo $SECRET_KEY
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Однако, когда я пытаюсь получить доступ к этим переменным из Python, они недоступны

>>> import os
>>> os.environ.get('SECRET_KEY')
>>> 

Как правильно Python получить доступ к переменным окружения, хранящимся в файле.env?

Файл.env:

WEB_CONCURRENCY=2
SECRET_KEY='XXXXXXXXXXXX'
DEBUG=True

1 ответ

Я думаю, что ваша проблема в том, что вы определяете это в своей текущей оболочке, выполняя SECRET_KEY=xxxxxxx, но когда вы открываете оболочку Python, она запускается в подпроцессе, и вы теряете переменную окружения в этой оболочке. export сделает переменную доступной в подпроцессе.

У тебя должно быть:

export SECRET_KEY=xxxxxxxx

В вашем .env файл, чтобы заставить его работать.

Редактировать:

Из того, что я прочитал по вашим ссылкам, это обычная переменная окружения оболочки Linux. Но Джанго должен иметь SECRET_KEY в качестве постоянной питона в настройках. Переменные среды Linux и переменные Python - это две разные вещи, поэтому определение переменной env SECRET_KEY не позволяет Джанго узнать settings.SECRET_KEY, Вы все равно должны рассмотреть возможность использования отдельного файла настроек, который в основном рекомендуется.

Другие вопросы по тегам