Ric*_*ard 16 python bash environment-variables
我正在使用Python 2研究Debian Jessie.为什么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'
Run Code Online (Sandbox Code Playgroud)
我使用/etc/environment- 设置这些环境变量- 不确定是否相关:
SECRET_KEY=xxx-xxx-xxx
Run Code Online (Sandbox Code Playgroud)
我不得不跑去source /etc/environment看看他们,我觉得这很奇怪.
更新:printenv SECRET_KEY什么都不产生,所以我猜SECRET_KEY是shell不是环境变量.
Mar*_*ers 35
您需要导出子进程的环境变量才能看到它们:
export SECRET_KEY
Run Code Online (Sandbox Code Playgroud)
演示:
$ 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
Run Code Online (Sandbox Code Playgroud)
您可以一步组合设置和导出:
export SECRET_KEY=xxx-xxx-xxxx
Run Code Online (Sandbox Code Playgroud)
请注意,新的变量/etc/environment不会自动显示在现有的shell中,直到您有新的登录名.对于GUI桌面,您必须注销并再次登录,对于SSH会话,您必须创建新的SSH登录.只有这样,您才能获得具有更改的新流程树.source /etc/environment仅使用设置"本地"变量(文件不是脚本).请参阅如何在不重新启动的情况下重新加载/ etc/environment?超级用户.