使用 MacPorts 在 Mac 上使用你最喜欢的开源应用

MacPorts 是一种在 macOS 上获取开源应用程序并保持它们更新的简便方法。
73 位读者喜欢这篇文章。
Getting started with Perlbrew

freephotocc via Pixabay CC0

“软件包管理器”是用于安装、升级和卸载应用程序的软件的通用名称。像 Linux 上的 dnfapt,BSD 上的 pkg_add,甚至 Python 上的 pip 和 Lua 上的 luarocks 这样的命令,使得用户可以很容易地向他们的系统添加新的应用程序。一旦你尝试过,你很可能会发现没有它很难生存,而且这是每个操作系统都应该包含的便利。并非所有操作系统都包含它,但开源社区倾向于确保计算领域中最好的想法传播到所有平台。

有几种专门为 macOS 设计的软件包管理器,其中最古老的一个是 MacPorts 项目。

Darwin 和 MacPorts

当 Apple 在世纪之交转向 Unix 时,它基本上构建了一个名为 Darwin 的 Unix 操作系统。此后不久,一群足智多谋的黑客迅速开始了一个名为 OpenDarwin 的项目,目的是创建一个独立的 Darwin 分支。他们希望 OpenDarwin 和 Apple 开发者可以在相关的代码库上工作,并在需要时相互借鉴。不幸的是,OpenDarwin 没有在 Apple 内部获得重视,最终 结束了。然而,OpenDarwin 软件包管理器项目 MacPorts 依然存在并运行良好,并继续为 macOS 提供出色的开源软件。

MacOS 已经带有一组健全的默认终端命令,一些借用自 GNU,另一些来自 BSD,还有一些专门为 Darwin 编写。你可以使用 MacPorts 添加新的命令,甚至是图形应用程序。

安装 MacPorts

你的 macOS 版本决定了你需要哪个 MacPorts 安装包。所以首先,获取你当前运行的 macOS 版本

$ sw_vers -productVersion
10.xx.y

适用于最新 macOS 版本的 MacPorts 版本可在 macports.org/install.php 上找到。你可以从网站下载安装程序,或者只复制链接并使用 curl 命令下载

$ curl https://distfiles.macports.org/MacPorts/MacPorts-2.6.3-10.14-Mojave.pkg \
--output MacPorts-2.6.3-10.14-Mojave.pkg

下载安装程序后,你可以双击安装它,或者使用终端安装它

$ sudo installer -verbose \
-pkg MacPorts*.pkg
-tgt /

配置 MacPorts

安装完软件包后,你必须将相关的路径添加到你的系统中,以便你的终端知道在哪里找到你的新 MacPorts 命令。通过将此添加到 ~/.bashrc,将 MacPorts 的路径及其手册页添加到你的 PATH 环境变量中

export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export MANPATH=/opt/local/share/man:$MANPATH

加载你的新环境

$ source ~/.bashrc

运行更新,以便你的 MacPorts 安装可以访问最新版本的软件

$ sudo port -v selfupdate

使用 MacPorts

一些软件包管理器从服务器安装预构建的软件到你的本地系统上。这被称为二进制安装,因为它安装了已被编译成可执行二进制文件的代码。其他软件包管理器,包括 MacPorts,从服务器拉取源代码,将其编译成计算机上的二进制可执行文件,并将其安装到正确的目录中。最终结果是相同的:你拥有你想要的软件。

他们到达那里的方式不同。

这两种方法都有优点。二进制安装速度更快,因为唯一需要的事务是将文件从服务器复制到你的计算机上。这是 Homebrew 用它的“bottles”做的事情,但有时存在 不可重定位构建的问题。从源代码安装意味着你可以轻松地修改软件的构建方式以及它的安装位置。

MacPorts 提供了 port 命令,并称其软件包为 ports (从像 NetBSD 的 Pkgsrc 和 FreeBSD 的 port 系统这样的项目中继承的术语。) 典型的 MacPorts 工作流程是搜索一个应用程序,然后安装它。

搜索一个应用程序

如果你知道你需要安装的特定命令或应用程序,请搜索它以确保它在 MacPorts 树中

$ sudo port search parallel

默认情况下,port 搜索软件包的名称和描述。你可以通过添加 --name 选项仅搜索名称字段

$ sudo port search --name parallel

你可以使用常见的 shell 通配符使你的搜索“模糊”。例如,仅在名称字段的开头搜索 parallel

$ sudo port search --name --glob "parallel*"

列出所有端口

如果你不知道你在搜索什么,并且你想查看所有可用的软件包(或 MacPorts 和 BSD 术语中的“端口”),请使用 list 子命令

$ sudo port list

该列表很长但很完整。当然,你可以将输出重定向到文本以供参考,或者将其管道传输到 moreless 以进行更仔细的检查

$ sudo port list > all-ports.txt
$ sudo port list | less

获取有关软件包的信息

你可以使用 info 子命令获取有关软件包的所有重要详细信息

$ sudo port info parallel
parallel @20200922 (sysutils)

Description:          Build and execute shell command lines from standard input in parallel
Homepage:             https://gnu.ac.cn/software/parallel/

Library Dependencies: perl5
Platforms:            darwin
License:              GPL-3+
Maintainers:          Email: example@example.com

这显示了有关每个应用程序的重要元数据,包括它是什么的简短描述和项目主页,以防你需要更多信息。它还列出了依赖项,这些是 其他 端口,必须在你的系统上才能使软件包正确运行。依赖项由 MacPorts 自动解决,这意味着,例如,如果你安装了 parallel 软件包,如果 perl5 尚未在你的系统上,MacPorts 也会安装它。最后,它提供了许可证和端口维护者。

安装一个软件包

当你准备好安装一个软件包时,请使用 install 子命令

$ sudo port install parallel

根据你的 CPU、代码库的大小和要安装的软件包的数量,编译代码可能需要一些时间,所以请耐心等待。这将是值得的。

安装完成后,新应用程序立即可用

$ parallel echo ::: "hello" "world"
hello
world

由 MacPorts 安装的应用程序被放置在 /opt/local 中。

查看已安装的内容

一旦软件包安装到你的系统上,你可以使用 contents 子命令查看它在你的驱动器上放置的内容

$ sudo port contents parallel
/opt/local/bin/parallel
[...]

清理

使用 MacPorts 安装软件包通常会在你的 ports 树中留下构建文件。这些文件对于调试失败的安装很有用,但通常你不需要将它们留在附近。使用 port clean 命令从你的系统中清除这些文件

$ port clean parallel

卸载软件包

使用 port uninstall 命令卸载软件包

$ port uninstall parallel

开源软件包管理

MacPorts 项目是一个早期运动的残余,旨在建立在作为 macOS 基础的开源工作之上。虽然该努力失败了,但已经有人努力将其作为名为 PureDarwin 的项目来复兴它。推动开放更多 Apple 代码是一项重要的工作,这项工作的副产品对每个运行 macOS 的人都很有益。如果你正在寻找一种在 Mac 上获取开源应用程序的简便方法,以及一种可靠的保持它们更新的方法,请安装并使用 MacPorts。

接下来要阅读什么
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算行业工作,通常同时进行。

5 条评论

感谢这篇文章。 MacPorts 与 Homebrew 有什么不同或相同? 在 Matt Broberg 六月份的文章之后,我使用 Homebrew 在 Mac 上安装了 GnuCash 和其他一些应用程序。

好问题,Don。

最终结果是相同的:你安装一个应用程序,该应用程序在你的计算机上运行。

他们到达那里的方式是唯一的区别。 homebrew 绑定到特定安装位置的方式对于某些系统管理员来说可能有点问题,并且 homebrew 使用 Ruby(我认为?)用于其安装脚本,而 MacPorts 使用 Makefiles。

作为用户,你不会注意到差异。 作为打包者或系统管理员,你可能更喜欢其中一个。

这对我来说是新信息。现在看看结果是否与MacOS的辅助功能兼容(特别是针对盲人的VoiceOver)。我会留意并检查一下。谢谢这篇文章。

这很大程度上取决于Apple如何将VoiceOver与其终端应用程序集成,以及Apple如何将VoiceOver与XQuartz(或他们现在使用的任何X11支持库)集成。如果Apple将VoiceOver设置为读取终端应用程序的输入和输出,那么通过MacPorts安装的任何新命令都应该相当好用。如果Apple让VoiceOver读取在X11图形服务器中运行的内容,那么它甚至应该能够描述GUI应用程序。

如果你尝试过,我很想知道结果。

可惜的是,Apple没有以开源技术发布其在辅助功能方面的进展。似乎他们在改进辅助功能方面所做的工作可以使每个人受益,将其锁定在一个价格标签后面真是太可惜了。

回复 ,作者: edkenlon

在*再次*无可挽回地搞砸了我的Homebrew安装后,我最近又开始使用MacPorts – 不,我不记得是怎么搞砸的,而且我的修补是那种持续的混乱,大多数人无需担心在单用户机器上会发生。 Homebrew合理的默认设置对于大多数人来说都很好。

但对我来说?我喜欢MacPorts处理可选软件包变体的方式。它们在`port info PACKAGE`中进行总结(如果存在),`port variants PACKAGE`描述它们,并且`port install PACKAGE +VARIANT`应用它们。

好东西。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.