我正在使用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而不是一个环境变量。
答案 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?结束。