“软件包管理器”是用于安装、升级和卸载应用程序的通用软件名称。类似 Linux 上的 dnf
或 apt
,或 BSD 上的 pkg_add
,甚至 Python 上的 pip
和 Lua 上的 luarocks
等命令,使用户可以轻松地向其系统添加新应用程序。一旦你尝试过,你可能会发现没有它很难生活,而且这是每个操作系统都应该包含的便利功能。并非所有操作系统都包含此功能,但开源社区倾向于确保计算领域的最佳创意在所有平台上得到传播。
有几个专为 macOS 设计的软件包管理器,其中最古老的之一是 MacPorts 项目。
Darwin 和 MacPorts
当苹果在本世纪初转向 Unix 时,它基本上构建了一个名为 Darwin 的 Unix 操作系统。此后不久,一群足智多谋的黑客立即开始着手一个名为 OpenDarwin 的项目,旨在创建 Darwin 的独立分支。他们希望 OpenDarwin 和苹果开发人员可以在相关的代码库上工作,并在有用时互相借鉴。不幸的是,OpenDarwin 没有在苹果内部获得支持,最终 走向终结。然而,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 使用其“瓶子”所做的事情,但有时会出现 不可重定位 构建的问题。从源代码安装意味着你可以轻松修改软件的构建方式以及安装位置。
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*"
列出所有 port
如果你不知道你要搜索什么,并且想查看所有可用的软件包(或 MacPorts 和 BSD 术语中的“ports”),请使用 list
子命令
$ sudo port list
列表很长但完整。当然,你可以将输出重定向到文本以供参考,或者将其管道传输到 more
或 less
以进行更仔细的检查
$ 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
这会显示有关每个应用程序的重要元数据,包括简要描述及其项目主页,以防你需要更多信息。它还列出了依赖项,这些是软件包正确运行所必须在系统上的其他 port。依赖项由 MacPorts 自动解析,这意味着,例如,如果你安装 parallel
软件包,如果你的系统上尚未安装 perl5
,MacPorts 也会安装它。最后,它提供许可证和 port 维护者。
安装软件包
当你准备好安装软件包时,请使用 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 的项目来复兴它。推动开放更多苹果代码是一项重要的工作,这项工作的副产品对每个运行 macOS 的人都很有益。如果你正在寻找一种在 Mac 上获取开源应用程序的简便方法以及一种可靠的方式来保持它们更新,请安装并使用 MacPorts。
5 条评论