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

Jac*_*ord 9 homebrew zsh macos-big-sur apple-silicon rosetta-2

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

知道我可以在任何 brew 命令之前arch --x86_64模拟该命令的英特尔,但这可能会导致您已经为 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
Run Code Online (Sandbox Code Playgroud)

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

Jac*_*ord 28

  1. 在 Apple Silicon 上本地安装 Homebrew /opt/homebrew

    mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将 Intel 模拟的 Homebrew 安装为默认值/usr/local

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

    如果您尚未安装 Rosetta 2,则需要先运行softwareupdate --install-rosetta

  3. 为英特尔自制软件创建别名。我打电话给我的,brow因为老了。但是,嘿,你做你自己的事。

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

    alias brow='arch --x86_64 /usr/local/Homebrew/bin/brew'
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将 ARM Homebrew 添加到您的 PATH。

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

    # Homebrew on Apple Silicon
    path=('/opt/homebrew/bin' $path)
    export PATH
    
    Run Code Online (Sandbox Code Playgroud)

    如果您对还在bash它会是PATH=/opt/homebrew/bin:$PATH

  5. 确认

    which brew 应该回来 /opt/homebrew/bin/brew

    brew --prefix 应该回来 /opt/homebrew

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

    brow --prefix 应该回来 /usr/local


如果您在两个 Homebrew 中都安装了相同的命令,它将默认为 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
Run Code Online (Sandbox Code Playgroud)

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

  • 伙计,你是救星 (2认同)

liv*_*xin 27

    \n
  1. 安装本机自制软件

    \n
    \xe2\x9d\xaf arch --arm64 zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"\n
    Run Code Online (Sandbox Code Playgroud)\n

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

    \n
  2. \n
  3. 安装 Rosetta Homebrew

    \n
    \xe2\x9d\xaf arch --x86_64 zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"\n
    Run Code Online (Sandbox Code Playgroud)\n

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

    \n
  4. \n
  5. 配置~/.zshrc为默认使用Brew基于arch,

    \n
    # Multiple Homebrews on Apple Silicon\nif [ "$(arch)" = "arm64" ]; then\n    eval "$(/opt/homebrew/bin/brew shellenv)"\n    export PATH="/opt/homebrew/opt/python@3.8/bin:$PATH"\n    # export LDFLAGS="-L/opt/homebrew/opt/python@3.8/lib" # For compilers to find python@3.8\nelse\n    eval "$(/usr/local/bin/brew shellenv)"\n    export PATH="/usr/local/opt/python@3.7/bin:$PATH"\n    export PATH="/usr/local/opt/python@3.9/bin:$PATH"\n    # export LDFLAGS="-L/usr/local/opt/python@3.7/lib" # For compilers to find python@3.7\nfi\n
    Run Code Online (Sandbox Code Playgroud)\n
  6. \n
  7. 测试

    \n
    \xe2\x9d\xaf arch\narm64\n\xe2\x9d\xaf which brew\n/opt/homebrew/bin/brew\n\xe2\x9d\xaf arch -x86_64 zsh\n\xe2\x9d\xaf arch\ni386\n\xe2\x9d\xaf which brew\n/usr/local/bin/brew\n# set alias as you like\n\xe2\x9d\xaf rzsh=\'arch -x86_64 zsh\'\n
    Run Code Online (Sandbox Code Playgroud)\n
  8. \n
\n