我如何 运行 两个独立的 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),使每个已安装的公式和依赖项分开?
在 /opt/homebrew
:
的 Apple Silicon 上本地安装 Homebrew
mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
默认安装 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
。
为 Intel 自制程序创建一个别名。我叫我的 brow
因为 O 代表老。但是,嘿,你做你自己的事。
在 ~/.zshrc
(或您的 shell 的等效项)中添加:
alias brow='arch --x86_64 /usr/local/Homebrew/bin/brew'
将 ARM Homebrew 添加到您的 PATH。
在 ~/.zshrc
(或您的 shell 的等效项)中添加:
# Homebrew on Apple Silicon
path=('/opt/homebrew/bin' $path)
export PATH
如果您仍在使用 bash
,它将是 PATH=/opt/homebrew/bin:$PATH
确认
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 而不是开头。
安装本机 Homebrew
❯ arch --arm64 zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
所有 Homebrew 相关的东西都在 /opt/homebrew
。
安装 Rosetta Homebrew
❯ arch --x86_64 zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
所有 Homebrew 相关的东西都在 /usr/local
。
配置~/.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
测试
❯ 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'
我想在 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),使每个已安装的公式和依赖项分开?
在
的 Apple Silicon 上本地安装 Homebrew/opt/homebrew
:mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
默认安装 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
。为 Intel 自制程序创建一个别名。我叫我的
brow
因为 O 代表老。但是,嘿,你做你自己的事。在
~/.zshrc
(或您的 shell 的等效项)中添加:alias brow='arch --x86_64 /usr/local/Homebrew/bin/brew'
将 ARM Homebrew 添加到您的 PATH。
在
~/.zshrc
(或您的 shell 的等效项)中添加:# Homebrew on Apple Silicon path=('/opt/homebrew/bin' $path) export PATH
如果您仍在使用
bash
,它将是PATH=/opt/homebrew/bin:$PATH
确认
which brew
应该 return/opt/homebrew/bin/brew
brew --prefix
应该 return/opt/homebrew
which brow
应该 returnbrow: 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 而不是开头。
安装本机 Homebrew
❯ arch --arm64 zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
所有 Homebrew 相关的东西都在
/opt/homebrew
。安装 Rosetta Homebrew
❯ arch --x86_64 zsh -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
所有 Homebrew 相关的东西都在
/usr/local
。配置
~/.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
测试
❯ 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'