Почему 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 без перезагрузки? над супер пользователем.