Переменные окружения 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
, Вы все равно должны рассмотреть возможность использования отдельного файла настроек, который в основном рекомендуется.