为什么Python不能看到环境变量?

时间:2015-08-13 16:38:27

标签: python bash environment-variables

我正在使用Python编写Debian Jessie 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才能让bash看到它们,我觉得这很奇怪。

更新:printenv SECRET_KEY什么都不产生,所以我猜SECRET_KEY是一个shell而不是一个环境变量。

1 个答案:

答案 0 :(得分:32)

您需要为子进程导出环境变量才能看到它们:

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中的新变量不会自动显示在现有的shell中,直到您有新登录。对于GUI桌面,您必须注销并再次登录,对于SSH会话,您必须创建新的SSH登录。只有这样,您才能获得具有更改的新流程树。使用source /etc/environment仅设置“本地”变量(文件不是脚本)。请参阅超级用户How to reload /etc/environment without rebooting?结束。