3.1 默认前缀、bottle 与下载缓存

原文链接: https://docs.brew.sh/FAQ

为什么必须安装在默认位置

Homebrew 为大量 formula 提供了预编译二进制包,也就是 bottle。这些 bottle 只有在安装到默认前缀时才能直接使用;装在别的前缀时,Homebrew 只能从源码构建。源码构建耗时长、容易失败,而且官方不提供支持。默认前缀是:

  • /opt/homebrew:Apple Silicon Mac;
  • /usr/local:Intel Mac;
  • /home/linuxbrew/.linuxbrew:Linux。

所以官网才会反复强调:“请把 Homebrew 装在默认前缀,这样就能使用预编译二进制包。换一个前缀,后果自负。”

为什么 Apple Silicon 默认用 /opt/homebrew

选择 /opt/homebrew 是为了让 Apple Silicon 原生安装与 Rosetta 2 下使用的 /usr/local 安装可以共存,并且两者都能使用 bottle。在 M4 上直接采用默认值即可。

bottle 何时无法使用

即使安装了 Homebrew,下列情况也会触发源码构建而不是“倒入”bottle:

  • 显式传入了 --build-from-source 选项;
  • 没有适用于当前系统版本的 bottle(macOS 的 bottle 只针对受支持的 macOS 版本生成);
  • Homebrew 没有装在默认前缀(少数 bottle 例外);
  • 安装命令传入了 formula 选项,例如 brew install <formula> 会优先找 bottle,而 brew install --with-foo <formula> 会触发源码构建。

下载的文件都放在哪里

运行下面的命令可以查看下载缓存目录:

1
brew --cache

通常输出 ~/Library/Caches/Homebrew。如果希望预先下载某个 formula 的源码或 bottle,可以使用:

1
brew fetch <formula>

该命令还会显示文件的 SHA-256 哈希,方便你核对下载内容。缓存的细节见 7.1 实用技巧精选。

什么时候需要关心这些概念

  • 安装报“此系统版本没有 bottle”,先检查 macOS 是否受支持;
  • 换过安装位置或自定义了 prefix,安装突然变慢,优先怀疑失去了 bottle 支持;
  • 想离线安装或预下载大文件,用 brew fetch 配合 brew --cache。