Codex ENOENT 文件不存在错误排查

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。它可能发生在读取文件、扫描目录、创建目录、执行命令这几类场景里。排查时不要只看最后一行,要看 openscandirspawnmkdir 后面跟的对象。

一、先判断缺的是文件、目录还是命令

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 通常表示要扫描某个目录,例如 srctests.codexdist。这种错误经常出现在项目结构和配置不一致时。

ENOENT: no such file or directory, scandir './src'

先看目录是否存在:

ls -la
ls -la src

如果你的代码目录叫 apppackages,而配置里写的是 src,就要改配置,而不是手动创建一个空目录糊弄过去。尤其是 monorepo 项目,执行目录不对时特别容易触发。

3. spawn 后面是命令名

如果看到 spawn git ENOENTspawn node ENOENTspawn 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 里的 scripts
  • tsconfig.jsonvite.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 调用链路的问题。

八、避免再次出现

  • 尽量在项目根目录执行命令,不确定时先 pwdls
  • 配置里少写绝对路径,多用相对路径和环境变量。
  • 团队统一 Node、pnpm、Python 等版本,避免本地差异。
  • 容器或远程环境里单独验证路径,不要默认和宿主机一致。
  • 把初始化步骤写进 README,例如 npm installcp .env.example .env

总结

Codex ENOENT 的核心排查思路很简单:先看缺的是文件、目录还是命令,再确认当前工作目录、配置路径、依赖安装和运行环境。多数问题不需要重装工具,沿着报错里的路径一层层查,基本都能定位到具体原因。

代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使更改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要体现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了同于以往的配置读取方法。接下来将具体阐述如何借助 nmcli 命令来处理这一挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值