环境:openEuler、Windows 11、WSL 2、python 3.12.3
背景:使用vscode连接Windows 的Linux子系统,开发python项目,获取环境变量失败
时间:20241029
说明:使用os.environ获取不到变量,设置/etc/profile、/root/.bash_profile等均不能解决问题
问题说明
源码部分:
注:此代码不为我写,我也不清楚为什么不使用get方法(python)
python
def EmbedModel():
return AzureAIEmbs() if os.environ["OPENAI_API_TYPE"] == "AzureAI" else OpenAIEmbs()
运行到此部分代码时,出现以下错误
bash
File "/home/jack/xxxxxxxxxxxx/model.py", line 8, in EmbedModel
return AzureAIEmbs() if os.environ["OPENAI_API_TYPE"] == "AzureAI" else OpenAIEmbs()
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "/opt/soft/python3/lib/python3.12/os.py", line 685, in __getitem__
raise KeyError(key) from None
KeyError: 'OPENAI_API_TYPE'
显然,获取不到该环境变量
尝试解决
由于是Linux子系统,常见的设置环境变量有三种
1、临时添加方案
bash
export OPENAI_API_TYPE=AzureAI
2、用户永久有效(两种方式,未测试)
bash
echo 'export OPENAI_API_TYPE=$OPENAI_API_TYPE:AzureAI' >> ~/.bashrc
source ~/.bashrc # 使其立即生效
bash
echo 'export OPENAI_API_TYPE=$OPENAI_API_TYPE:AzureAI' >> ~/.bash_profile
source ~/.bash_profile # 使其立即生效
3、所有用户永久生效
bash
echo 'export OPENAI_API_TYPE=$OPENAI_API_TYPE:AzureAI' >> /etc/profile
source /etc/profile # 使其立即生效
以上方案均失败,悲剧
真正解决
- 打开VS Code,点击左下角的设置按钮(齿轮图标)或按下快捷键`Ctrl + ,`打开设置面板。
- 在搜索框中输入 环境变量 ,点击用户(远程测试也可以,工作区未测试)- 功能 - 终端 - 在settings.json中编辑
由于我是Linux子系统,所以选择是Linux,按需求选择即可
3、在打开的文件中输入如下:
bash
{
"terminal.integrated.env.linux": {
"OPENAI_API_TYPE":"AzureAI"
}
}
搞定,收工