VSCode 设置环境变量(WSL 2)

环境:openEuler、Windows 11、WSL 2、python 3.12.3

背景:使用vscode连接Windows 的Linux子系统,开发python项目,获取环境变量失败

时间:20241029

说明:使用os.environ获取不到变量,设置/etc/profile、/root/.bash_profile等均不能解决问题


问题说明

源码部分:

 注:此代码不为我写,我也不清楚为什么不使用get方法(python)

def EmbedModel():
  return AzureAIEmbs() if os.environ["OPENAI_API_TYPE"] == "AzureAI" else OpenAIEmbs()

运行到此部分代码时,出现以下错误

  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、临时添加方案

export OPENAI_API_TYPE=AzureAI

2、用户永久有效(两种方式,未测试)

echo 'export OPENAI_API_TYPE=$OPENAI_API_TYPE:AzureAI' >> ~/.bashrc

source ~/.bashrc    # 使其立即生效
echo 'export OPENAI_API_TYPE=$OPENAI_API_TYPE:AzureAI' >> ~/.bash_profile

source ~/.bash_profile    # 使其立即生效

3、所有用户永久生效

echo 'export OPENAI_API_TYPE=$OPENAI_API_TYPE:AzureAI' >> /etc/profile

source /etc/profile    # 使其立即生效

 以上方案均失败,悲剧

真正解决

1. 打开VS Code,点击左下角的设置按钮(齿轮图标)或按下快捷键`Ctrl + ,`打开设置面板。


2. 在搜索框中输入 环境变量 ,点击用户(远程测试也可以,工作区未测试)- 功能 - 终端 - 在settings.json中编辑

由于我是Linux子系统,所以选择是Linux,按需求选择即可

3、在打开的文件中输入如下:

{
    "terminal.integrated.env.linux": {
        "OPENAI_API_TYPE":"AzureAI"
    }
}

搞定,收工 

### 如何在 VSCode设置配置环境变量 #### 使用 Windows 系统设置全局环境变量 对于希望在整个系统范围内生效的环境变量,可以通过系统的高级设置来完成。具体操作是在桌面“此电脑”图标上点击鼠标右键,在弹出菜单中选择“属性”,随后进入“高级系统设置”。在此界面下切换至“高级”选项卡并找到“环境变量”按钮进行点击[^1]。 #### 配置 WSL 2 下的 VSCode 开发 Python 项目的环境变量 当利用 Visual Studio Code 结合 Windows Subsystem for Linux (WSL 2) 进行编程工作时,如果遇到无法正常读取预期环境变量的情况,则需特别注意针对 WSL 的特定配置方法。一种常见做法是通过修改 `.bashrc` 或者其他 shell 初始化文件的方式定义所需变量;另一种则是借助于 VSCode 插件支持的功能直接指定调试会话中的临时性环境设定[^2]。 #### 调试模式下的自定义环境变量传递方式 为了避免可能出现的问题以及确保程序能够访问必要的外部资源路径或其他依赖项信息,建议采用显式的参数列表形式向应用程序传入所需的运行期上下文数据而不是尝试间接引用预设好的宏替换标记。例如,在启动脚本里可以这样写: ```json { "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal", "env": { "MY_VAR": "/path/to/directory" } } ] } ``` 此外,也可以通过 Python 内建模块 `os` 来动态获取当前进程所处的操作系统级别的环境变量状态,并打印出来用于验证目的: ```python import os print(os.environ) try: print(os.environ["NVIDIA_VISIBLE_DEVICES"]) except KeyError as e: print(f"{e}: Environment variable not set.") ``` 以上代码片段展示了两种不同的输出风格——一个是遍历整个映射表而另一个只关心单个具体的条目是否存在及其值是什么[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值