我使用的是 ubuntu 13.04、bash、python2.7.4
解释器看不到我设置的变量。
这是一个例子:
$ echo $A
5
$ python -c 'import os; print os.getenv( "A" )'
None
$ python -c 'import os; print os.environ[ "A" ]'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
KeyError: 'A'
但是使用
PATH
变量一切正常:
$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
它注意到
PATH
的变化:
$ PATH="/home/alex/tests/:$PATH"
$ echo $PATH
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
可能出了什么问题?
PS使用时出现问题
$PYTHONPATH
:
$ python -c 'import os; print os.getenv("PYTHONPATH")'
None
添加,因为我没有看到与我遇到的问题完全相同的答案。如果您有多个“shell”,例如 BASH 和 Z-Shell,请确保您已在正确的 shell 中导出环境,并且该环境可供 python 使用。
如果您使用 VSCode 并将默认 shell 设置为 Z shell,那么可以理解的是,如果
.bashrc
中不存在变量,则 .zshrc
中的变量将不会对 python 解释器可见。那么解决方案是 export
两个 shell 中的变量,或者将默认 shell 更改为具有必要变量的 shell。
正如 @NelsonGon 指出的,如果您在 shell 窗口 A 中设置环境变量,然后从 shell 窗口 B 启动 Python,则可能会出现此问题,因为窗口 B 对窗口 A 的环境一无所知。
这篇 Reddit 帖子中概述的一个解决方案是使用名为 python-dotenv
的 Python 库将一个小环境文件加载到您正在使用的 Python 环境中。引用他们的回答:
安装 python-dotenv
pip install python-dotenv
在项目目录中创建一个名为 .env
MY_SECRET_KEY =“12345”
SOME_OTHER_SECRET="45678"
from dotenv import load_dotenv
import os
load_dotenv() # you can specify a location to your .env file as an argument if it's not at your project root
SECRET_KEY = os.getenv('MY_SECRET_KEY')