在WSL终端配置环境变量时,许多人遇到“Missing environment variable `OPENAI_API_KEY`”报错。根本原因并非Key无效,而是WSL与Windows的环境变量系统不互通。在PowerShell中通过`$env:OPENAI_API_KEY`设置的变量,WSL无法识别——必须单独在Linux子系统内完成配置。
以下为典型报错截图,可先对照确认,避免后续无效操作。
确认当前终端是否在WSL中
执行`uname -a`,若输出包含`Microsoft`或`WSL`字样,说明已位于WSL环境。若提示命令未找到或显示Windows内核信息,请切换至WSL终端。后续所有操作**必须在此Linux环境下进行**。
同时,通过`wsl -l -v`查看当前运行的发行版名称(如Ubuntu24.04),记录该名称,后续配置配置文件路径时会用到。
在WSL中设置OPENAI_API_KEY环境变量
提供两种方式,可根据需求选择。
方法一:临时生效(当前终端会话)
直接运行:
`export OPENAI_API_KEY="sk-xxx"`
将`sk-xxx`替换为真实密钥,注意不要包含空格、引号或换行。此设置仅对当前窗口有效,关闭后失效。
方法二:永久生效(推荐)
① 打开对应的shell配置文件:
- 若使用bash:`nano ~/.bashrc`
- 若使用zsh(Ubuntu 24.04默认):`nano ~/.zshrc`
② 在文件末尾追加一行:`export OPENAI_API_KEY="sk-xxx"`
③ 保存退出后立即生效:`source ~/.zshrc`(或`source ~/.bashrc`)
注意:密钥前后不能有空格,也不能使用单引号或双引号包裹——某些WSL shell版本会将带引号的值视为字符串字面量,导致Codex解析失败。
验证环境变量是否真正生效
执行`echo $OPENAI_API_KEY`,应完整输出以`sk-`开头的密钥。若返回空白,说明上一步写入位置有误或未执行source。
再执行`env | grep OPENAI`,确保输出为`OPENAI_API_KEY=sk-xxx`,而非`OPENAI_API_KEY='sk-xxx'`或`OPENAI_API_KEY="sk-xxx"`——带引号即无效格式。此步骤不通过时,Codex启动必然报missing错误,无需急于修改config.toml。
检查Codex是否从环境变量读取(而非config.toml)
Codex CLI优先读取环境变量,仅当`OPENAI_API_KEY`不存在时才回退到`~/.codex/config.toml`中的`api_key`字段。因此,在WSL中正确设置环境变量后,**不应在config.toml中重复填写api_key**——二者冲突时Codex行为未定义,可能静默忽略环境变量。
可临时重命名config.toml进行测试:
`mv ~/.codex/config.toml ~/.codex/config.toml.bak`
之后再运行`codex`,若不再报missing错误,则说明环境变量已生效。