我最近转到asdf来管理运行时(特别是Node、Ruby和Python(。然而,我已经通过Homebrew安装了很多软件包,这些软件包依赖于Homebrew自己安装的其中一个运行时的版本。我想删除这些,并且只通过asdf管理运行时。
如何让Homebrew使用asdf管理的运行时?
对此的简短回答是NO。
长期的答案是事情很复杂,虽然没有什么能阻止Brew使用asdf安装版本,但它在实践中不太可能起作用。让我详细说明。
Brew
Brew是MacOS的软件包管理器(尽管现在支持其他操作系统(。Brew是在系统范围内安装的,您必须使用sudo
才能安装它。它仅取决于底层操作系统,而使用它安装的软件包仅取决于操作系统或其他Brew软件包。Brew的设计并不是为了管理同一软件包的多个版本,但它目前对它的支持有限。
对于每个包装;公式";为其定义,指定应如何编译/安装包。该公式还指定了包具有的任何依赖项,Brew递归地安装包,直到安装了您请求的包所需的所有内容。例如,如果运行brew install vim
,Brew可能会安装其他Brew包,如ruby
和python
,因为它们在vim
公式中被列为依赖项。
asdf
asdf是一个版本管理器,通常安装在用户级别。经常出现在$HOME/.asdf
中。它是专门为在用户级别处理同一包的多个版本而设计的。它依赖于操作系统或其他操作系统包管理器的插件依赖性,但插件也可以依赖于其他插件。
问题
考虑到asdf和Brew之间的这些差异,有几个问题阻碍了Brew包依赖asdf插件:
- Brew在系统级别进行全局安装。它安装的包不应该依赖于在用户级别安装的东西(比如asdf安装的那些(。您可以通过将asdf作为系统级安装来解决这个问题。我不知道有谁做过这种事
- Brew大多是独立的,Brew包的设计仅依赖于其他Brew包或操作系统提供的东西。无论您的
$PATH
Brew上有什么,它都会安装您正在安装的软件包中列为依赖项的任何其他Brew软件包