“软件包管理器”是用于安装、升级和卸载应用程序的软件的通用名称。像 Linux 上的 dnf
或 apt
,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
该列表很长但很完整。当然,你可以将输出重定向到文本以供参考,或者将其管道传输到 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
这显示了有关每个应用程序的重要元数据,包括它是什么的简短描述和项目主页,以防你需要更多信息。它还列出了依赖项,这些是 其他 端口,必须在你的系统上才能使软件包正确运行。依赖项由 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。
5 条评论