在 macos 上可用 homebrew 安装旧版本软件:先在 homebrew core 历史提交中找到目标 formula 的对应 commit sha,再通过新建 tap、下载该 commit 的 formula 文件、pin tap 后安装;最后可 pin 已安装包防止升级。

在 macOS 上用 Homebrew 安装旧版本软件并不直接支持,因为 brew install 默认只提供最新稳定版。但通过一些组合操作,可以精准获取并安装历史版本——关键在于定位对应 formula 的老版本快照、切换到该 commit、再构建安装。
找到目标软件的旧版本 formula
Homebrew 的公式(formula)托管在 GitHub 仓库中,每个历史提交都保留着当时的定义。要安装旧版(比如 node@16 或更早的 python@3.9),先确认该版本是否曾被官方收录:
- 访问 Homebrew Core 历史提交列表
- 在页面右上角搜索框输入软件名(如
node.rb),点击进入其变更历史 - 按时间倒序浏览,找到包含目标版本号(如
16.20.2)的 commit,记下 SHA 值(如a1b2c3d)
临时切换 formula 到指定历史版本
Homebrew 不允许直接 brew install 某个 commit 的 formula,需手动拉取并覆盖本地缓存:
- 执行:
brew tap-new $USER/old-versions(新建个人 tap,避免污染主仓库) - 用 curl 下载目标 commit 的 formula 文件:
curl -s https://raw.githubusercontent.com/Homebrew/homebrew-core/a1b2c3d/Formula/node.rb > $(brew --repo $USER/old-versions)/Formula/node.rb - 运行:
brew tap-pin $USER/old-versions(防止被自动更新覆盖)
安装并锁定旧版本
此时可像普通 formula 一样安装,且后续不会随 brew upgrade 被升级:
brew install $USER/old-versions/node- 验证版本:
node -v应输出预期旧版本号 - 如需长期固定,执行:
brew pin node(注意:pin 是针对已安装包的,不是 tap)
补充说明与常见问题
部分老版本可能依赖已移除的旧 build 工具或 API,安装失败时可尝试:
- 临时关闭 SIP(仅限必要场景,不推荐常规使用)
- 用
--build-from-source强制编译(brew install --build-from-source $USER/old-versions/node) - 检查 formula 中的
depends_on,手动安装缺失的旧依赖(如openssl@1.1)
不复杂但容易忽略:每次安装前建议先 brew update 确保本地 repo 最新,否则可能因缓存导致 SHA 查找偏差。










