在同一台计算机上同时安装Homebrew和Macports是否安全?


73

我在iMac上安装了MacPort,并安装了大量端口。

不过,我对试用Homebrew感兴趣,因为我听说过很多有关它的好东西,并且因为我注意到它包含了我使用的几种工具的最新版本。

但是两者可以共存于同一台计算机上吗,还是我需要首先完全卸载MacPorts?

另外,如果两者可以同时安装,它们是否将完全彼此独立?Homebrew的功能之一是不会重新安装系统中已包含的新版本内容(例如python)。这是否还会扩展到不安装MacPorts已维护的版本?

如果我随后卸载MacPorts,会发生什么情况?

Answers:


24

它们不会很好地共存。Apple gcc在/ usr / local中查找某些内容。这意味着macports编译器可以找到搬运工不期望的内容。有关在/ usr / local中发现的问题的示例,请参见macports邮件列表和错误。


4
我只对homebrew进行过粗略的研究,但是如果将homebrew的默认安装位置从/ usr / local更改为/ opt / homebrew / usr / local之类,可以避免该问题吗?
巴布(Babu)2010年

@Babu -据冲泡,您应该谨慎行事
彼得Ajtai

@babu-可能会出现问题,但是会用哪个自制软件或macports来建立该路径,而另一个选择那些可执行文件,我怀疑其中一个系统的端口未使用另一个路径进行完整测试
user151019 2012年

18

我对类似的问题给出了另一个答案

如果自制软件安装在/ usr / local下,则从源代码构建软件时会引起问题。这是默认设置,这是一个错误的选择,因为此路径位于编译器和其他工具的默认搜索路径中。因此,使用Homebrew的版本而不是其自身版本,从其他打包软件进行的构建可能会选择错误的依赖项。

多年前,在项目的开始,甚至MacPorts都使用/ usr / local。但是事实证明,不像其常见问题解答中所述与其他工具合作。不幸的是,自制软件开发人员不想听到以前的经历,而忽略了这些事实……

通常,最好只使用一种工具以避免所有问题。MacPorts会尽力修补所有已编码的路径,例如Fink使用的/ sw。因此通常它可以工作,但是在/ usr / local中安装任何东西肯定会引起问题。

[…]


看起来也可以在中安装自制软件~/.homebrew。如果安装在MacPorts上,它仍然会干扰MacPorts吗?
Behrang 2012年

/ usr / local以外的任何其他位置都应该可以。
raimue 2012年

如果将Homebrew安装到安装MacPort的/ opt / local上,MacPort和Homebrew会很好地共存吗?
亚当LS

1
如果MacPorts已经安装在/ opt / local中,则不应手动将其他软件安装到/ opt / local中。当您在其中放置MacPorts未知的文件时,肯定会产生干扰,从而导致安装端口时发生冲突。
raimue 2013年

8

我曾经认为,对Gnu构建工具的功能感到担心的/usr/local是偏执狂。构建工具期望那里有很多东西:在包管理器(我开玩笑)之前的美好时光里,我们编译了任何东西/usr/local。但是,尽管Autoconf通常会解决问题,但许多开源项目的纯粹构建复杂性确实会引起问题,并且当您遇到困难时,这些问题可能很难消除。

但是/usr/local需要平衡一下Autoconf遇到麻烦的风险,因为在维护麻烦上有两个,三个或四个不同的Perl,Tcl和Ruby不同的副本,每个副本都覆盖了不同的包库,这需要平衡。不愉快。

由于我在MacPorts和Fink方面的经验通常是由于这一原因而激怒,并且有时切换到编译老式的方式/usr/local,所以我很高兴看到Homebrew对此并没有感到困惑。我尝试将MacPorts配置为安装到/usr/local,但MacPorts竭尽全力使其变得困难。我了解,这样做的动机是在与他们的邮件列表和错误跟踪器联系时,为他们自己的生活提供便利:但是请注意,尽管我们应该尊重志愿者打包人员的工作并将他们的时间视为宝贵,作为用户,调试便利并不是唯一会影响您的简单性。

至少在这方面,自制软件以过去的方式进行操作,而MacPorts则尽量不进行干预。如果您愿意使用Homebrew记录所需的软件包,并在遇到困难时擦拭/ usr / local并重新安装,那么万一出现严重错误,您可以随时退出。并且,一旦您意识到/ usr / local中的问题通常不会带来对计算机造成永久性损坏的风险,那么您可能会更乐于承担风险。

我只想指出OSX上的包装要比FreeBSD差得多:Apple似乎并不真正在乎其BSD子系统的可用性,因为这是他们可以解决的问题。


好吧,我的问题是从一个愚蠢的用户的角度提出的,该用户只是使用包管理器来“获取内容”。完全不确定我是否可以 “如果事情出错了,可以对自己有所了解”。不过,无论如何还是要多加澄清。谢谢!
Rich

1
MacPorts是不使用/ usr / local的充分理由,请参见trac.macports.org/wiki/FAQ#defaultprefix
raimue 2011年

3
@Raim:这是有充分理由的-在错误跟踪的便利性和用户计算机上安装的简便性之间,这几乎是一个折衷。我在乎后者。
查尔斯·斯图尔特

1
由于有人(或某物)在其中安装了$ lib副本而可能出错的事物的数量/usr/local无穷无尽。体系结构,版本,已配置的功能和标志,部分安装,过时的安装以及安全问题,并且和会引起问题。当然,如果您知道自己在做什么,请继续,但不要提出有关此问题的错误。经验表明,人们仍然会提交错误,这恰恰是-t存在跟踪模式(,请参见下文)的原因以及为什么避免/usr/local作为默认建议的原因。
neverpanic 2014年

@neverpanic-自从我写了这个答案以来,我对将所有内容编译到/ usr / local的风险的看法已经改变,主要是因为典型的开源项目的构建复杂性不断上升,而Autoconf问题并没有那么容易解决。整理:至少,“偏执狂”是不公平的。不过,我仍然不喜欢Macports的“拥有自己的私有构建世界”方法,值得一提的是,邮件列表交互的简单性并不是最终用户应该担心的唯一简单性。我将在警告中添加警告。
查尔斯·斯图尔特

6

根据MacPorts常见问题解答

请注意,从2.3.0开始,MacPorts可以从端口的构建系统中自动隐藏/ usr / local(以及端口不依赖的所有其他文件)。此功能称为跟踪模式,通过向端口提供-t标志来激活该功能,例如

sudo port -t install <portname>

这很重要,因为根据Homebrew安装页面:

Homebrew相对于竞争对手而言才有效的原因之一是因为我们建议安装到/ usr / local。在危险中再选择一个前缀!

因此,以很少的个人经验,我得出的理论是,对于MacPort安装始终使用-t标志应该可以避免MacPorts和Homebrew在同一系统上共存的大多数问题。要解决您的最后一个问题:卸载MacPorts不会引起任何问题,我看不出任何原因。


请注意,您将遭受重大的性能损失。但总的来说,这几乎在所有情况下都适用。
neverpanic 2014年

感谢您指出该警告@neverpanic。我认为性能损失只会影响安装端口的时间,而不会影响已安装端口的任何运行时特性。真正?
webappzero 2014年

正确。它只能防止生成时问题,也不能防止运行时问题(但是很少发生)。
neverpanic 2014年

在实践中,我忘记了始终使用跟踪标志的要求。因此,除非您确信将始终使用-t,否则我不建议其他人这样做。
webappzero 2015年

如果您不想记住它,可以编写包装脚本或shell别名(但要注意sudo和shell别名之间的交互),以便始终为您传递它。请注意,El Capitan当前会中断跟踪模式。我正在努力解决。
neverpanic 2015年

4

在已经使用端口多年的计算机上安装自制软件时,我可以阅读以下内容:

Warning: You have MacPorts or Fink installed:
  /opt/local/bin/port

This can cause trouble. You don't have to uninstall them, but you may want to
temporarily move them out of the way, e.g.

  sudo mv /opt/local ~/macports

小心!


1

webappzero的sudo port -t ...解决方案应该有所帮助。坦白说,我同时使用Fink,MacPorts和Homebrew,并始终遵循MacPorts(现在无论如何),并且仅使用其他两个中的任何一个来安装我无法从MacPorts获得的东西。即使在学习port -t技巧之前,我也很少遇到这种困难。但是,如果您尝试使用多个程序包管理器来维护复杂的开发和服务器环境,则可能至少会感到不舒服。选择一个,并避免其他,但对于您迫切需要的东西,将主要的放在前面。

如果我听到的关于苹果公司的事情是对的,那么除了苹果公司自己的东西之外,苹果公司将禁止将其安装到/ usr /中(或者也许他们已经在El Crapitan中这样做了,我避免将它升级到更高版本)问题得到解决),我想这将在Homebrew默认使用其他方法后缓解该问题-无论我们是否同意Apple的笨拙方法。

最后,我喜欢将Apple自己的端口限制在其自己的树中的想法,我只是希望它不是/ usr /。我希望他们使用/ System / bin /等来隔离自己的东西,因此我可以更轻松地使用社区维护的最新软件绕过它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.