程序员必踩的一个坑:Codex 报错 Missing environment variable `OPENAI_API_KEY`,完整解决指南(附架构图)

程序员必踩的一个坑:Codex 报错 Missing environment variable OPENAI_API_KEY,完整解决指南(附架构图)

最近在使用 OpenAI Codex CLI 调试 AI API 平台时,我遇到一个看似简单却非常容易踩坑的问题。

启动 Codex 后输入任意内容:

复制代码
在吗?

终端直接报错:

yaml 复制代码
Missing environment variable: OPENAI_API_KEY

刚开始很多人会怀疑:

  • API Key 配错了?
  • config.toml 写错了?
  • Codex 版本问题?

实际上 80% 的原因只有一个:环境变量没有正确生效。

这篇文章我会完整讲清楚:

1️⃣ 为什么会出现这个错误 2️⃣ Codex 的认证机制 3️⃣ 如何正确配置 API Key 4️⃣ 如何让环境变量全局生效 5️⃣ AI API Gateway 的推荐架构

如果你正在使用 Codex / Cursor / Cline / 自建 AI API 平台,这篇文章应该能帮你省掉不少排查时间。


一、问题现象

启动 Codex:

复制代码
codex

终端界面类似:

javascript 复制代码
>_ OpenAI Codex (v0.120.0)

model: gpt-5.x
directory: ~/workspace/project

输入任意问题:

复制代码
hello

立即出现报错:

yaml 复制代码
Missing environment variable: OPENAI_API_KEY

说明 Codex 没有读取到 API Key。

Codex CLI 需要通过 API Key 才能调用模型,如果系统中没有这个变量,就会直接报错。 (Medium1)


二、Codex 的认证机制

Codex 的认证方式主要有两种:

方式一:登录账号

复制代码
codex login

优点:

  • 不需要手动配置 Key

缺点:

  • 不方便接入第三方 API
  • 不方便做 API 网关

方式二:API Key

这是大多数开发者使用的方式。

Codex 会读取系统环境变量:

复制代码
OPENAI_API_KEY

如果这个变量不存在,就会报错。


三、很多人会犯的两个错误

错误一:把 Token 写进 config.toml

很多人会这样写:

ini 复制代码
env_key = "sk-xxxx"

其实 env_key 指的是 环境变量名,而不是 Key。

正确写法:

ini 复制代码
env_key = "OPENAI_API_KEY"

然后在系统环境变量中设置 Key。

否则 Codex 会去找:

bash 复制代码
$sk-xxxx

当然找不到。


错误二:只在当前终端设置

很多人执行:

ini 复制代码
export OPENAI_API_KEY=xxxx

这种方式 只对当前终端有效。

关闭终端后变量就消失。


四、正确配置方式(推荐)

如果你使用 Mac + zsh ,建议写入 ~/.zshrc。

1 打开配置文件

bash 复制代码
nano ~/.zshrc

加入:

ini 复制代码
export OPENAI_API_KEY="你的API_KEY"

如果使用 AI API 网关:

ini 复制代码
export OPENAI_BASE_URL="http://localhost:8080/v1"

2 重新加载

bash 复制代码
source ~/.zshrc

3 验证是否成功

bash 复制代码
echo $OPENAI_API_KEY

如果输出 Key(部分隐藏),说明成功。


五、Codex 配置文件示例

Codex 配置文件在:

javascript 复制代码
~/.codex/config.toml

示例:

ini 复制代码
model = "deepseek-chat"
model_provider = "local"

[model_providers.local]
name = "local-api"
base_url = "http://localhost:8080/v1"
env_key = "OPENAI_API_KEY"
wire_api = "responses"

Codex 会自动读取环境变量。

另外 Codex 也支持 .env 文件,只要放在项目根目录即可自动加载。 (OpenAI Developer Community2)

例如:

ini 复制代码
OPENAI_API_KEY=xxxxx

六、快速排查环境变量

如果再次报错,可以执行:

bash 复制代码
env | grep OPENAI

正常情况应该看到:

ini 复制代码
OPENAI_API_KEY=xxxxx
OPENAI_BASE_URL=http://localhost:8080/v1

如果没有输出,就说明变量没有生效。


七、AI API 平台的典型架构

现在很多开发者会搭建 AI API Gateway。

架构一般如下:

scss 复制代码
                ┌───────────────┐
                │   Codex CLI   │
                │   Cursor IDE  │
                │   Cline / Roo │
                └───────┬───────┘
                        │
                        ▼
              ┌───────────────────┐
              │   AI API Gateway  │
              │  (统一API平台)    │
              └─────────┬─────────┘
                        │
        ┌───────────────┼───────────────┐
        ▼               ▼               ▼
   DeepSeek API     Qwen API        GPT API

这种架构的好处:

  • 统一 API Key 管理
  • 多模型统一调用
  • Token 统计
  • 成本控制
  • 支持多个客户端

目前很多 AI SaaS 平台(例如 OpenRouter、n1n)本质上就是这种模式。


八、Codex 配置结构图

Codex 的配置结构通常如下:

javascript 复制代码
~/.codex/
│
├── config.toml
├── auth.json
├── history.jsonl

其中:

arduino 复制代码
config.toml

用于配置:

  • 模型
  • API 地址
  • Provider
  • API Key 环境变量

Codex 默认会在用户目录 ~/.codex 中读取这些配置。 (OpenAI开发者3)


九、总结

如果 Codex 报错:

yaml 复制代码
Missing environment variable: OPENAI_API_KEY

基本只需要检查三件事:

1 是否设置环境变量

bash 复制代码
echo $OPENAI_API_KEY

2 是否写入 shell 配置

bash 复制代码
~/.zshrc

3 是否 reload

bash 复制代码
source ~/.zshrc

只要这三步完成,Codex 基本都能正常运行。


十、写在最后

如果你正在开发:

  • AI API Gateway
  • AI 开发平台
  • 多模型聚合系统

建议统一使用 环境变量管理 API Key。

这样:

  • Codex
  • Cursor
  • Cline
  • RooCode

都可以直接接入你的平台。

开发效率会高很多。

相关推荐
学长毕设31 分钟前
基于springboot的农资管理系统-附源码
java·spring boot·后端
拖孩1 小时前
一个人 + AI 做的小程序,今天,正式回本了
前端·后端·微信小程序
进击的丸子1 小时前
代理网络环境下 Linux Pro 在线激活实操指南
javascript·后端·安全
念何架构之路2 小时前
Go reflect包值操作 Value 的读写、可设置性与 interface 布局
开发语言·后端·golang
小林ixn2 小时前
用 FastAPI + SQLAlchemy 从零手搓一个博客系统:一套能落地、能讲清楚的 RESTful 后端
后端·python·fastapi
不识君3 小时前
esl-client 2.0.0 发布:Java 项目接入 FreeSWITCH,从引入到使用
spring boot·后端·开源
牧瀬クリスだ3 小时前
Redis五大数据类型全解析:从入门到实战
java·数据库·redis·后端·缓存
Rain的Java大神之路3 小时前
北漂 13 年,我把 Java 家底钉成了这张知识图谱(全站免费)
java·后端·程序员
Amos_Web3 小时前
通过 Rspack 源码学 Rust(一):`mod`、`pub` 与 `use crate`/`use super`
后端
张彦峰ZYF4 小时前
拆得开不等于该拆开:微服务与模块化单体的边界判据、规模阈值、团队适配与一致性代价
后端·微服务·边界是否稳定·扩展天花板是否到顶·有无小组能独立值班·独立部署的自由会否被用上·这一刀是否切断不可降级的不变量