问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在M1 芯片 Mac 上使用 Homebrew

发布网友 发布时间:2024-09-27 08:27

我来回答

1个回答

热心网友 时间:2024-11-14 06:32

Homebrew,作为Mac上管理软件包的实用工具,目前尚未完全适应搭载Apple silicon的新Mac机型。尽管如此,Homebrew在新Mac上仍可用,并已发布了支持ARM架构的实验性版本。以下是我设置过程中探索出的可行、相对实用的方法。

在安装ARM版Homebrew时,需要将其安装在/opt/homebrew路径下,而非以往的/usr/local/Homebrew。由于官方的安装脚本还未更新,可以通过以下命令手动安装:

(注:如果安装和使用过程中报错,可能是因为当前用户对于/opt/homebrew路径没有权限。对此,可以通过sudo chown -R $(whoami) /opt/homebrew接管该目录。)

虽然手动安装了ARM版Homebrew,但在终端中运行brew命令并不能直接启动该版本。这是因为默认情况下,ARM版Homebrew用来安装程序的路径/opt/homebrew/bin并未在环境变量PATH中,因此终端无法检索到该路径下的brew程序。

为此,编辑配置文件~/.zshrc,加入以下内容:

(注:本文推定读者使用macOS Big Sur的默认终端zsh,如使用bash或fish,则修改~/.bashrc或~/.config/fish/config.fish,后同。)

重新启动终端后,直接执行brew即可启动ARM版Homebrew。

为什么ARM版Mac要使用/opt路径?

根据《文件系统层次结构标准》(Filesystem Hierarchy Standard,主要为Linux系统制定,但对具有共同UNIX基因的macOS也有参考价值):

历史上,/usr/local主要用于放置在本地编译并另行安装的程序,避免与/usr下的系统自带版本冲突;而/opt则用于安装非系统自带的、第三方预先编译并发行的独立软件包。

显然,在如今的macOS使用场景下,用户很少需要自行编译软件包,/usr/local和/opt的区分在一定程度上已成为名义上的了。Homebrew启用/opt作为ARM版的安装路径,可能更多是出于确保与X86版相互区隔的考虑。

接下来,需要安装X86版Homebrew作为备用。由于很多软件包目前还未适配ARM架构(可以在Homebrew的Apple silicon issue页面查询),无法通过ARM版Homebrew安装。为此,需要先启动一个X86环境的终端。

实际上,注意到在任何命令前增加arch-x86_64,就可以以X86模式运行该命令。因此,运行以下命令即可启动一个X86模式终端,使得之后运行的命令都在X86模式下运行:

此时,运行Homebrew的官方安装脚本即可完成X86版Homebrew的安装。

系统中目前有了两个brew程序,即X86版的/usr/local/bin/brew和ARM版的/opt/homebrew/bin/brew。那么,当在终端中执行brew命令时,系统会以哪个为准呢?

当存在重名程序时,终端会按照重名程序在环境变量PATH中的先后顺序选择要执行的版本。由于之前配置~/.zshrc时,将ARM版Homebrew的路径放在了PATH的最前面,因此执行brew时,位于/opt/homebrew/bin/brew的ARM版将被优先运行。如果要运行X86版,则需要手动输入完整路径arch-x86_64/usr/local/bin/brew。

如果觉得输入这么长的命令过于麻烦,可以在~/.zshrc中为两个版本分别设置简称(alias):

这样,执行abrew install可以调用ARM版Homebrew安装软件包,执行ibrew install可以调用X86版,从而不容易混淆。

至于应该使用哪个版本的Homebrew安装软件包,需要区别考虑:

如果你在拿到M1版Mac以后,选择了从旧Mac迁移数据或恢复Time Machine备份,那么系统中可能已经有了遗留的X86版Homebrew和用它安装的软件包。此外,你可能也希望将以往惯用的软件包无遗漏地迁移到新Mac。这些情况下,可以使用Homebrew Bundle功能辅助迁移工作。

要导出使用X86版Homebrew安装的软件包列表,运行以下命令就能在当前目录下得到一个名为Brewfile的备份文件。该文件可以用普通文本编辑器打开,列举了所有已安装软件包、添加的第三方软件源(tap)、Homebrew Cask管理的GUI程序和mas-cli管理的Mac App Store程序:

记下Brewfile的路径。然后,使用ARM版Homebrew导入其内容并安装:

就完成了迁移。

需要注意的是,如果你是在同一台机器的两版Homebrew间迁移,那么并不需要迁移通过Homebrew Cask和App Store安装的GUI程序(Homebrew也不会允许覆盖安装)。这时,可以手动编辑上述Brewfile,将以cask和mas开头的记录删除,然后再通过brew bundle导入。

如果想让ARM版Homebrew接管已经安装的Homebrew Cask软件,只要将位于/usr/local/Caskroom下的各文件夹移动到/opt/homebrew/Caskroom即可:
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
iPhone XR电量百分比怎么设置 Django如何使用网页嵌套网页(2023年最新解答) 社保之前工作缴了 后面工作不缴。自己要怎么续上?自己缴要缴多少?每... 壁挂炉数字不亮了怎么回事了解壁挂炉数字不亮的原因及解决方法_百度知 ... 单反长镜头和短镜头什么区别 ai的剪切蒙版快捷键是什么 自学当程序员需要哪些基础 程序员,需要学什么课程 想当一名出色的程序员数学必须要很好吗 华为路由器192.168.1.1怎样设置? 终于分手了,因为彼此知道永远都没有结局,长痛不如短痛,但是还都留着... 梦见自己杀死蜈蚣一只又一只在身上杀都杀不完 梦到一只很大的蜈蚣红色的 最后把 它杀死了 高三理科如何在一个月内将分数从270提到430+ net:: err_ connection_ failure_ re_ connected是什么情况? net:: err_ connection_错误是什么意思?怎么解决 19年山东考生,文化课二模270分,联考252,鲁美校,230,都过了,有什么学校... aaron paul演过一部电影福特野马改装的叫什么名字 ...显示“错误 104 (net::ERR_CONNECTION_FAILED): 什么原因? 极品飞车电影里,结尾时,女主接托比出狱开的福特是什么车啊?_百度知 ... 挂职体会例文 据说《极品飞车》电影中的部分情节是根据Saleen的传奇故事改编的?是... ...都市的,可以有一点穿越,)仙侠 修真 玄幻小说 ...灵魂穿越到一个古代(类似古代)的书生身上。 2022年中国大型国有商业银行对比分析:中国银行 vs农业银行 vs工商银 ... 家里停电跳闸了,为什么智能电表上显示的当前电压为230伏,而火零线电 ... 去浙江先到什么市,浙江去外省旅游攻略路线 浙江国庆哪里人少又好玩,国庆自驾旅游浙江攻略最新 浙江漂流亲子游玩好去处推荐,余杭漂流浙江旅游路线攻略 急!帮我起个3-5个字带"川"的网名!!! 佩戴貔貅招财吗?不戴貔貅招财吗? Python 3.9.1 是否是首个支持macOS 11 Big Sur的Python版本在M1上... Big Sur与Catalina的优缺点 我14岁化妆一年了,对皮肤好吗? 昨晚梦见很大的神像,我在拜他,他听到我说话震了我两下突然有一只很大的... 14岁女生的化妆包里装啥 一段时间老是放屁是怎么回事 突然老放屁是怎么回事 抖音怎么看有没有关注自己? 白猫洗洁精能洗狗毛吗?洗后狗毛掉色吗? 如何在抖音上区分朋友和粉丝? 男朋友有点自卑是不是该分手? 猫咪口臭怎么办最有效的方法 求助,猫猫口臭还老放屁=.= 猫咪为什么臭烘烘的? 山岭是什么意思 什么叫山岭 投资者认购资金不足的,其放弃认购是由结算参与人申报,还是由投资者申报... 高高的山岭是什么意思呀 现在有沈阳到喀左的虎跃吗? 长安悦翔v3车门漏水咋回事0?