我如何 运行 两个独立的 Homebrew 安装?

How can I run two isolated installations of Homebrew?

我想在 Apple Silicon Mac 上同时安装和 运行 两个版本的 Homebrew:一个 ARM64 版本,一个 Intel 版本 运行ning 在 Rosetta 2 下。

I know 我可以在任何 brew 命令前加上 arch --x86_64 来模拟 Intel 的该命令,但这可能会导致您已经为 ARM64 构建其依赖项的公式发生冲突。例如:

Error: gnupg dependencies not built for the x86_64 CPU architecture:
  pkg-config was built for arm64
  gettext was built for arm64
  readline was built for arm64
  openssl@1.1 was built for arm64

如何安装和运行两个独立的 Homebrew 版本(一个用于本机 ARM64,一个用于模拟 Intel),使每个已安装的公式和依赖项分开?

  1. /opt/homebrew:

    的 Apple Silicon 上本地安装 Homebrew
    mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
    
  2. 默认安装 Intel 模拟 Homebrew /usr/local:

    arch --x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    

    如果您还没有安装 Rosetta 2,您需要先 运行 softwareupdate --install-rosetta

  3. 为 Intel 自制程序创建一个别名。我叫我的 brow 因为 O 代表老。但是,嘿,你做你自己的事。

    ~/.zshrc(或您的 shell 的等效项)中添加:

    alias brow='arch --x86_64 /usr/local/Homebrew/bin/brew'
    
  4. 将 ARM Homebrew 添加到您的 PATH。

    ~/.zshrc(或您的 shell 的等效项)中添加:

    # Homebrew on Apple Silicon
    path=('/opt/homebrew/bin' $path)
    export PATH
    

    如果您仍在使用 bash,它将是 PATH=/opt/homebrew/bin:$PATH

  5. 确认

    which brew 应该 return /opt/homebrew/bin/brew

    brew --prefix 应该 return /opt/homebrew

    which brow 应该 return brow: aliased to arch --x86_64 /usr/local/Homebrew/bin/brew

    brow --prefix 应该 return /usr/local


如果您在两个 Homebrews 中安装了相同的命令,它将默认为 Apple Silicon (/opt/homebrew/),因为我们在 PATH 中添加了该命令。要覆盖,运行 命令及其完整路径 (/usr/local/bin/youtube-dl),或覆盖你的 PATH 一个命令 (PATH=/usr/local/bin youtube-dl)。

我还在 .zshrc (alias ib='PATH=/usr/local/bin') 中创建了另一个方便的别名,因此我可以在任何 Homebrew 安装的命令前加上 ib 以强制使用该命令的 Intel 版本:

~ ▶ which youtube-dl
/opt/homebrew/bin/youtube-dl
~ ▶ ib which youtube-dl
/usr/local/bin/youtube-dl

如果您希望 Intel 成为默认设置 brew,请将 /opt/homebrew/bin 添加到 PATH 的 end 而不是开头。

  1. 安装本机 Homebrew

    ❯ arch --arm64 zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    

    所有 Homebrew 相关的东西都在 /opt/homebrew

  2. 安装 Rosetta Homebrew

    ❯ arch --x86_64 zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    

    所有 Homebrew 相关的东西都在 /usr/local

  3. 配置~/.zshrc默认使用Brew基于arch,

    # Multiple Homebrews on Apple Silicon
    if [ "$(arch)" = "arm64" ]; then
        eval "$(/opt/homebrew/bin/brew shellenv)"
        export PATH="/opt/homebrew/opt/python@3.8/bin:$PATH"
        # export LDFLAGS="-L/opt/homebrew/opt/python@3.8/lib" # For compilers to find python@3.8
    else
        eval "$(/usr/local/bin/brew shellenv)"
        export PATH="/usr/local/opt/python@3.7/bin:$PATH"
        export PATH="/usr/local/opt/python@3.9/bin:$PATH"
        # export LDFLAGS="-L/usr/local/opt/python@3.7/lib" # For compilers to find python@3.7
    fi
    
  4. 测试

    ❯ arch
    arm64
    ❯ which brew
    /opt/homebrew/bin/brew
    ❯ arch -x86_64 zsh
    ❯ arch
    i386
    ❯ which brew
    /usr/local/bin/brew
    # set alias as you like
    ❯ rzsh='arch -x86_64 zsh'