homebrew、macports 或其他软件包安装工具有啥区别/用法? [关闭]

Posted

技术标签:

【中文标题】homebrew、macports 或其他软件包安装工具有啥区别/用法? [关闭]【英文标题】:What is the difference/usage of homebrew, macports or other package installation tools? [closed]homebrew、macports 或其他软件包安装工具有什么区别/用法? [关闭] 【发布时间】:2014-02-17 21:47:54 【问题描述】:

我最近刚从 Ubuntu 切换到 Mac。我很失望 mac 在 Ubuntu 中没有方便的sudo apt-get。我听说我应该使用自制软件,但我不确定自制软件或 macports 是做什么的?

【问题讨论】:

很多相关:apple.stackexchange.com/questions/32724/… 几年前,自制软件的前门有这样一句话:“自制软件更好,因为它是用 Ruby 编写的”。我对 Ruby 没有任何意见,请注意,一点也不。我喜欢 oop,而 ruby​​ 是一种很好的 oop 语言。我遇到的问题是任何认为一种语言优于其他所有语言的软件开发人员。仅出于这个原因,我对自制软件没有兴趣。此外,macports 多年来一直为我工作良好。 【参考方案1】:

Homebrew 和 macports 都解决了同一个问题 - 即安装未与 osx 捆绑的通用库和实用程序。

通常这些是与开发相关的库,这些工具最常用于使用 osx 的开发人员。

它们都需要安装 xcode 命令行工具(您可以从 https://developer.apple.com/ 单独下载),对于某些特定的软件包,您需要安装整个 xcode IDE。

xcode 可以从 mac 应用商店安装,它是免费下载的,但它需要一段时间,因为它大约 5GB(如果我没记错的话)。

macports 是来自 BSD 的 port 实用程序的 osx 版本(因为 osx 是从 BSD 派生的,这是一个自然的选择)。对于任何熟悉任何 BSD 发行版的人来说,macports 都会有宾至如归的感觉。

自制程序和 macports 之间的一个主要区别;我更喜欢自制软件的原因是它不会覆盖应该在 osx 中“本地”安装的东西。这意味着如果有可用的本机包,homebrew 会通知您而不是覆盖它并导致进一步的问题。 它还在用户空间中安装库(因此,您不需要使用“ sudo”来安装东西)。这在摆脱库时也很有帮助,因为一切都在您可以访问的路径中。

homebrew 还拥有一个更活跃的用户社区,并且它的软件包(称为公式)经常更新。


macports 不会覆盖本机 OSX 包 - 它提供自己的 版本 - 这是我更喜欢 macports 而不是 home-brew 的主要原因,你 需要确定您使用的是什么以及 Apple 在 到港口的时间不同,并且被认为落后了多年 部分项目更新

您能否提供一个参考,表明 macports 覆盖了本机 OS X 包?据我所知,所有 macports 安装都发生在 /opt/local

也许我应该澄清一下——我在回答中没有说 macports 会覆盖 OSX 本机包。他们都单独安装项目。

当您应该“本地”安装(使用库/工具的首选安装程序)以获得更好的兼容性时,Homebrew 会警告您。这就是我的意思。它还将使用 OS X 中提供的尽可能多的本地库。来自wiki:

我们真的不喜欢 Homebrew/homebrew 中的骗子

但是,我们确实喜欢轻率的骗子!

OS X 自带的或者是由 不应欺骗 RubyGems、CPAN 或 PyPi。有充分的理由 这个:

重复库会定期中断构建 重复库会出现微妙的错误,在较小程度上还会出现重复工具 我们希望您更加努力,让您的公式与 OS X 自带的系统兼容

您可以选择性地用自制软件覆盖 macosx 提供的实用程序版本。

【讨论】:

macports 不会覆盖本机 OSX 软件包 - 它提供自己的版本 - 这是我更喜欢 macports 而不是 home-brew 的主要理由,你需要确定你使用的是什么以及 Apple 的不同之处多次到港口,并被认为是某些项目更新的 ye3srs 您能否提供一个参考,表明 macports 会覆盖本机 OS X 软件包?据我所知,所有 macports 安装都发生在 /opt/local 您至少确实非常强烈地暗示 MacPorts 会覆盖本机 OS X 软件包。与其在“澄清”的同时假装你没有说写了你写的东西,不如编辑有问题的句子 这句话,“homebrew 和 macports 之间的一个主要区别;我更喜欢 homebrew 的原因是它不会覆盖应该在 osx 中“本地”安装的东西。应该更改为“homebrew 和 macports 之间的一个主要区别;我更喜欢 homebrew 的原因是 homebrew 不会自动安装 Apple 已经提供的工具和库的并行副本。” MacPorts 不会覆盖本机应用程序,它“将移植的软件限制在一个私有的‘沙箱’中,防止它与你的操作系统及其供应商提供的软件混合,以防止它们被损坏。” - MacPorts 指南,第 1 章【参考方案2】:

MacPorts 是必经之路。

    就像@user475443 指出的那样,MacPorts 有更多的包。使用 brew,您很快就会发现自己被困,因为您需要的公式不存在。

    MacPorts 是本机应用程序:C + TCL。你根本不需要Ruby。要在 Mac OS X 上安装 Ruby,您可能需要 MacPorts,所以只需使用 MacPorts,您就会很开心。

    MacPorts 非常稳定,8 年来我从未遇到过问题,我的整个 Unix 生态系统都依赖它。

    如果您是 php 开发人员,您可以安装最新版本的 Apache(Mac OS X 使用 2.2)、PHP 和您需要的所有扩展,然后使用一个命令进行全部升级。忘记对 Homebrew 做同样的事情。

    MacPorts 支持小组。

    foo@macpro:~/ port select --summary
    
    Name        Selected      Options
    ====        ========      =======
    db          none          db46 none
    gcc         none          gcc42 llvm-gcc42 mp-gcc48 none
    llvm        none          mp-llvm-3.3 none
    mysql       mysql56       mysql56 none
    php         php55         php55 php56 none
    postgresql  postgresql94  postgresql93 postgresql94 none
    python      none          python24 python25-apple python26-apple python27 python27-apple none
    

    如果您同时安装了 PHP55 和 PHP56(带有许多不同的扩展),您只需一个命令即可在它们之间进行切换。所有相关扩展都是该组的一部分,它们将在所选组内激活:php55 或 php56。我不确定 Homebrew 有这个功能。

    Rubists 喜欢用 Ruby 重写一切,因为他们唯一放心的就是 Ruby 本身。

【讨论】:

Rubists 喜欢重写——呵呵,看看 NodeJS 的家伙在 JS 中为 MySQL 实现二进制协议! :) 您不需要 MacPorts 来安装 Ruby — Ruby 包含在 OS X 中,而 brew 使用系统 Ruby。 @Michael Ekstrand OS X 不包含 Ruby 的最新版本。 无法对此投票。太刻薄了,刻薄破坏了信息。 赞成反对省略的“反尖刻”赞成票。从人类那里收到的任何信息都会有一种自然的偏见(在这种情况下是“狡猾”)。我很欣赏这个用户的观点,也许特别是因为这个答案读起来不像***条目。【参考方案3】:

目前,由于 Macports 的成熟度,Macports 的软件包(~18.6 K)比 Homebrew 公式(~3.1K)多得多。不过 Homebrew 正在慢慢迎头赶上。

Macport 包往往由一个人维护。

Macports 可以保留多个版本的软件包,您可以启用或禁用它们以进行测试。有时此列表可能会损坏,您必须手动对其进行编辑才能恢复正常,尽管这并不难。

两个包管理器都会要求定期更新。这可能需要一些时间。

注意:您的系统上可以同时拥有这两个包管理器!它不是一个或另一个。 Brew 可能会抱怨,但 Macports 不会。

此外,如果您正在处理 python 或 ruby​​ 包,请尽可能使用虚拟环境。

【讨论】:

有时此列表可能会损坏,您必须手动编辑它才能恢复正常,尽管这并不难。 我从未见过这种情况发生,但这并不是说不可能。当时的情况如何?您是否提交了错误 (trac.macports.org)? 两个包管理器都会要求定期更新。这可能需要一些时间。 这似乎是一个奇怪的说法。在几年的使用中,我只记得 MacPorts 本身升级了几次,而且更新相当快。您的意思是端口本身必须经常更新吗?嗯,他们可以,但这是一件好事,而不是一个缺点,我想!另外,值得注意的是,MacPorts 不会要求做任何事情——也就是说,没有唠叨;您必须向 it 询问过时的软件包。【参考方案4】:

默认情况下,Homebrew 将软件包安装到您的 /usr/local。 Macport 命令需要 sudo 才能安装和升级(类似于 Ubuntu 中的 apt-get)。

更多详情:

本网站建议使用 Hombrew:http://deephill.com/macports-vs-homebrew/

而本网站列出了使用 Macports 的优势:http://arstechnica.com/civis/viewtopic.php?f=19&t=1207907

我最近也从 Ubuntu 切换了,我喜欢使用自制软件(它简单易用!),但如果你喜欢使用 sudo,Macports 可能是更好的选择!

【讨论】:

你是说 Homebrew 在不需要 sudo 的情况下将东西安装到 /usr/local 中? @Keith 该站点不正确。或者至少,它遗漏了一个大前提。它说“Apple 已经为我们留下了这个目录。这意味着默认情况下没有 /usr/local 目录,因此无需担心会弄乱现有工具。” Apple 还没有离开 /usr/local 去 Homebrew。 Apple 已将/usr/local 留给“基本操作系统未包含的可执行文件、库等”。这意味着在使用 Homebrew 之前安装的工具可能已经创建了/usr/local,因此如果没有sudo,就无法对其进行修改。他们不会在 wiki 上讨论这个问题。 @NgocPham 我的意思是,我不相信 Homebrew 可以在没有 root 权限的情况下使用 /usr/local/usr 在全新 OS X 安装上的默认权限是 root 所有者,其他任何人都没有写入权限。为了创建 /usr/local,Homebrew 需要root 访问权限。 (我不想为任何事情辩护) @Articuno 我想我现在明白了。只是声明homebrew 可以在没有sudo 的情况下安装东西,因为当它设置自己时,它使用 sudo 使对目录的权限更宽松,因此它可以做任何事情在/usr/local 内,无需触发密码。这是否意味着“无密码安装”部分错误?我不这么认为! homebrew 无需密码也能获取东西,这仍然是事实。 我认真地认为改变核心目录的权限是一个非常糟糕的设计决定。不明白为什么自制软件不使用 /usr/local/homebrew 或 /opt/homebrew。我猜是因为 /usr/local/bin 默认在 $PATH 中。通常在 *nix 系统上,如果您不想使用 root 权限执行操作,只需在用户空间中执行即可。 Homebrew 当然可以配置为使用健全的目录。我只是觉得 Macports 是更 UNIX 的做事方式,来自 BSD 等等。

以上是关于homebrew、macports 或其他软件包安装工具有啥区别/用法? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

安装Homebrew

OSX安装MacPorts

卸载了macports,不能再使用自制软件了

mac homebrew安装

Mac电脑安装homebrew和npm

mac怎么验证macports安装成功了