Codex ENOENT 文件不存在错误排查
用 Codex 跑本地项目时,偶尔会遇到 ENOENT。这个错误一般不是模型本身的问题,而是运行环境里某个文件、目录或可执行命令找不到。先别急着重装,建议从“报错里到底缺了什么”开始查。
常见报错长这样:
### token云桥中转 0029.org ###
Error: ENOENT: no such file or directory, open '/Users/dev/project/package.json'
spawn git ENOENT
Error: ENOENT: no such file or directory, scandir './src'
ENOENT: no such file or directory, mkdir '/tmp/codex/workspace'
ENOENT 是系统级错误,含义就是:No such file or directory。它可能发生在读取文件、扫描目录、创建目录、执行命令这几类场景里。排查时不要只看最后一行,要看 open、scandir、spawn、mkdir 后面跟的对象。
一、先判断缺的是文件、目录还是命令
1. open 后面是文件路径
如果报错里出现 open xxx,说明 Codex 或项目脚本正在读取某个文件,但文件不存在。
ENOENT: no such file or directory, open '/Users/dev/demo/package.json'
先确认当前目录是否正确:
pwd
ls -la
如果你本来应该在项目根目录执行,却在上一级目录或子目录执行,就会出现这类问题。比如 Node 项目根目录一般应该能看到 package.json。
cd /Users/dev/demo
ls package.json
如果文件确实没有,就要回到项目初始化或依赖安装流程,而不是继续改 Codex 配置。
2. scandir 后面是目录路径
scandir 通常表示要扫描某个目录,例如 src、tests、.codex、dist。这种错误经常出现在项目结构和配置不一致时。
ENOENT: no such file or directory, scandir './src'
先看目录是否存在:
ls -la
ls -la src
如果你的代码目录叫 app 或 packages,而配置里写的是 src,就要改配置,而不是手动创建一个空目录糊弄过去。尤其是 monorepo 项目,执行目录不对时特别容易触发。
3. spawn 后面是命令名
如果看到 spawn git ENOENT、spawn node ENOENT、spawn python ENOENT,说明系统找不到这个可执行命令。这个和文件路径无关,重点查 PATH。
spawn git ENOENT
检查命令是否可用:
which git
git --version
which node
node -v
which python3
python3 --version
如果终端里能执行,但 Codex 所在进程执行不了,多半是 GUI 启动、Shell 环境不一致或容器环境里没装对应命令。比如 VS Code、Cursor、某些桌面客户端启动时,不一定读取你的 ~/.zshrc。
二、按顺序排查当前工作目录
Codex 处理本地项目时,经常依赖当前工作目录。很多 ENOENT 不是文件真的没了,而是命令在错误目录下执行。
建议先执行:
pwd
ls -la
git status
如果 git status 提示:
fatal: not a git repository
说明当前目录不是仓库目录。进入正确目录后再运行:
cd /path/to/your/project
git status
如果是多层目录,例如:
my-workspace/
frontend/
package.json
backend/
package.json
就不要在 my-workspace 里直接执行依赖前端配置的命令,应该进入对应子项目:
cd frontend
npm install
npm run test
三、检查 Codex 配置里写死的路径
有些项目会配置工作目录、上下文目录、忽略文件、输出目录。如果配置里写了绝对路径,换一台机器后很容易报 ENOENT。
可以搜索一下项目里的路径配置:
grep -R "Users/dev" .
grep -R "workspace" .
grep -R "src" .codex* package.json tsconfig.json 2>/dev/null
重点关注这些位置:
.codex或类似工具配置目录package.json里的scriptstsconfig.json、vite.config.*、webpack.config.*- CI 脚本、Dockerfile、Makefile
如果配置里写的是旧路径,比如:
/Users/oldname/project/src
建议改成相对路径:
./src
相对路径也要注意执行目录。如果脚本是在子目录执行,./src 指向的就不是你以为的那个目录。
四、依赖没装或安装不完整
Node 项目里还有一种常见情况:脚本要执行 node_modules/.bin 下的命令,但依赖没安装,最后表现为 ENOENT。
先检查:
ls node_modules
ls node_modules/.bin
没有依赖就安装:
npm install
如果项目使用 pnpm 或 yarn,不要混用包管理器:
pnpm install
# 或
yarn install
包管理器混用会导致 lock 文件、软链接结构不一致,Codex 调用测试或构建脚本时就可能找不到二进制文件。
五、临时目录、权限和容器路径问题
如果报错发生在 /tmp、/var/folders、容器挂载目录,重点查目录是否存在以及是否有权限。
ls -ld /tmp
mkdir -p /tmp/codex/workspace
chmod 755 /tmp/codex/workspace
Docker 场景里更常见的是宿主机目录没有正确挂载:
docker run --rm -it \
-v "$PWD":/workspace \
-w /workspace \
node:20 bash
进入容器后再确认文件是否存在:
pwd
ls -la
不要只在宿主机确认文件存在,Codex 真正执行命令的环境里也要能看到。
六、API 或代理配置引起的间接 ENOENT
有些时候表面上是 Codex 报错,实际是外部调用脚本没有跑起来,例如读取 token 文件、证书文件、代理配置文件失败。可以检查环境变量:
env | grep -i codex
env | grep -i openai
env | grep -i proxy
如果团队里多人共用配置,建议把 token、base url、代理地址放到明确的 .env 或系统环境变量里,不要散落在脚本中。实际接入时,如果需要稳定的 API 转发和统一管理,我一般会建议顺手看一下 token云桥AI中转站 0029.org,至少比每个人本地各配一套更容易排查问题。
七、修复后的验证方式
修完后不要只看 Codex 是否不报错,最好按层验证。
第一步,验证文件和目录:
pwd
test -f package.json && echo "package.json ok"
test -d src && echo "src ok"
第二步,验证命令:
which git
which node
which npm
第三步,验证项目脚本:
npm run lint
npm test
npm run build
如果这些都正常,再重新执行 Codex 相关操作。这样可以区分是项目环境问题,还是 Codex 调用链路的问题。
八、避免再次出现
- 尽量在项目根目录执行命令,不确定时先
pwd和ls。 - 配置里少写绝对路径,多用相对路径和环境变量。
- 团队统一 Node、pnpm、Python 等版本,避免本地差异。
- 容器或远程环境里单独验证路径,不要默认和宿主机一致。
- 把初始化步骤写进 README,例如
npm install、cp .env.example .env。
总结
Codex ENOENT 的核心排查思路很简单:先看缺的是文件、目录还是命令,再确认当前工作目录、配置路径、依赖安装和运行环境。多数问题不需要重装工具,沿着报错里的路径一层层查,基本都能定位到具体原因。
604

被折叠的 条评论
为什么被折叠?



