2026-10-17 · Codex 教程 ⑤ · 工具链
工具链
不是装得越多越好
换到新机器,最容易犯的错是先装一堆工具,再想拿它们做什么。 这次我们反过来:先写清输入输出,最后只留下真正用得到的几样。
换到 Mac 的第一天,我在终端里敲下 brew install jq。命令没报错,
等了很久也没装完。查下去才发现:Homebrew 能跑,但这个系统版本太新,
常用包的预编译列表是空的,安装退化成现场编译,而源码下载又卡住。
那台机器上还躺着 MacPorts,我又试了一次,结果只是把同一个下午花了两遍。
两个包管理器同时挂在 PATH 里,连报错都开始互相遮挡。
证据很直接:brew info --json=v2 jq 里,bottles 列表是空数组;
brew fetch jq 跑了三分钟没有进展。不是网络慢,是这条路当时走不通。
先确认输入输出,再决定装什么
我停下来,把要做的事写成三行:读一段 JSON、下载一个文件、转一段音频。
然后从系统里找现成的:/usr/bin/python3 是 3.9.6,自带 json 模块;
curl 本来就有;ffmpeg 已经在 ~/bin,版本 6.0。
真正缺的只有一个小工具,于是下载静态二进制,放进自己的目录。
第一次运行,终端只回 Killed: 9。我先怀疑权限,又怀疑架构,
最后才确认是 Apple 芯片对未签名二进制的拦截。
codesign --force --sign - ~/bin/工具名 之后,
--version 正常输出。完整的排查写在
包管理器不认识你的新系统时 里,
这里只留结论:下载完成不等于能用。
输入是什么格式、输出要给谁看、成功时能看到什么、失败时会不会破坏原文件。 这四项里有两项答不上来,装进来的工具大概率只会多一层要维护的东西。
失败时换路径,不要在一个包管理器上死磕
系统自带的 Python、curl、已有的 ffmpeg,加上 macOS 原生框架, 能覆盖大部分“看一眼、转一下、跑一遍”的活儿;第三方包只在确实省下重复劳动时才留下。 那天最值钱的不是学会了 codesign,而是知道了包管理器不是唯一入口。
一条路堵住,先看目标有没有变,再换静态二进制、系统工具或原生框架。 把一下午耗在“让 brew 成功”上,等于把手段当成了目的。 工具越多,PATH 越长,出问题时越难判断是哪一层在起作用。
结论
工具链的规模不是能力。能说清每个工具为什么在这里,比装满一屏命令更可靠。 现在我们机器上的原则是:先有任务,再有工具;先跑通最小闭环,再考虑替换。 装得少,排查时也少一层噪音。
《Codex 教程》连载:① 总纲 · ② 把红线写成代码 · ③ 记忆放在哪里 · ④ 守收件箱,不碰发送键 · ⑤ 工具链不是装得越多越好 —— 下一篇:一条 94 分钟的教程,怎么拆成可查的证据。 回到笔记