我最近转而使用asdf管理运行时(特别是Node、Ruby和Python)。但是,我安装了很多通过Homebrew安装的软件包,这些软件包依赖于Homebrew自己安装的某个版本的其中一个运行时。我想删除这些软件包,并仅通过asdf管理运行时。
如何让Homebrew使用由asdf管理的运行时?
我最近转而使用asdf管理运行时(特别是Node、Ruby和Python)。但是,我安装了很多通过Homebrew安装的软件包,这些软件包依赖于Homebrew自己安装的某个版本的其中一个运行时。我想删除这些软件包,并仅通过asdf管理运行时。
如何让Homebrew使用由asdf管理的运行时?
简短的回答是不行。
长话短说,事情很复杂,虽然没有什么阻止Brew使用asdf安装的版本,但实际上这样做不太可能成功。让我详细解释一下。
Brew是MacOS(现在也支持其他操作系统)的软件包管理器。Brew被系统范围地安装,您必须使用sudo
来安装它。它只依赖于底层操作系统,使用它安装的软件包只依赖于操作系统或其他Brew软件包。Brew并不是为了管理同一软件包的多个版本而设计的,但它今天确实有限的支持。
对于每个软件包,都有一个Brew“公式”为其定义,指定软件包应该如何编译/安装。公式还指定软件包具有的任何依赖项,并且Brew递归地安装软件包,直到安装了您请求的软件包所需的所有内容。例如,如果您运行brew install vim
,Brew可能会安装其他Brew软件包,如ruby
和python
,因为它们在vim
公式中列为依赖项。
asdf是一个版本管理器,通常安装在用户级别。通常位于$HOME/.asdf
中。它专门为在用户级别上处理同一软件包的多个版本而设计。它依赖于操作系统或其他操作系统包管理器来获取插件依赖项,但插件也可以依赖于其他插件。
鉴于asdf和Brew之间的差异,有几个问题阻止Brew软件包依赖于asdf插件:
$PATH
上有什么,Brew都会安装由您安装的软件包列出的任何其他Brew软件包作为依赖项。
~/.asdf/shims
放在PATH的最前面,但Homebrew仍然会重新安装和编译Ruby、Rust等到/usr/local/Cellar
,尽管~/.asdf/installs
已经有了完全相同版本的软件。 - Katrin Leinweber