Почему Python не может видеть переменные среды?
Я работаю над Debian Jessie с Python 2. Почему не может Python environ
посмотреть переменные среды, которые видны в bash?
# echo $SECRET_KEY
xxx-xxx-xxxx
# python
>>> from os import environ
>>> environ["SECRET_KEY"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/.virtualenvs/prescribing/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
KeyError: 'SECRET_KEY'
Я устанавливаю эти переменные среды, используя /etc/environment
- не уверен, что это имеет отношение:
SECRET_KEY=xxx-xxx-xxx
мне пришлось бежать source /etc/environment
чтобы Баш увидел их, что показалось мне странным.
обновление: printenv SECRET_KEY
ничего не производит, поэтому я думаю SECRET_KEY
- это не переменная окружения.
1 ответов
вам нужно экспорт переменные среды для дочерних процессов, чтобы увидеть их:
export SECRET_KEY
демо:
$ SECRET_KEY='foobar'
$ bin/python -c "import os; print os.environ.get('SECRET_KEY', 'Nonesuch')"
Nonesuch
$ export SECRET_KEY
$ bin/python -c "import os; print os.environ.get('SECRET_KEY', 'Nonesuch')"
foobar
вы можете объединить настройку и экспорт в один шаг:
export SECRET_KEY=xxx-xxx-xxxx
обратите внимание, что новые переменные в /etc/environment
не показывайтесь в существующих оболочках автоматически, пока у вас нет новый логин. Для рабочего стола GUI вам придется выйти и снова войти в систему, для сеансов SSH вам придется создать новый логин SSH. Только тогда вы получите новое дерево процессов с настоящим изменениям. Используя source /etc/environment
устанавливает только "локальные" переменные (файл не является скриптом). См.Как перезагрузить /etc / environment без перезагрузки? над супер пользователем.