从 Mac 下的包管理和安装工具说起

可能很多人和我一样 , 最开始习惯使用的是 Windows , 后来开始接触 Linux , 再后来 , 接触到 Mac , 几周以后 , 一发不可收拾 。
如果说 , 在 Windows 下面 , 基本上习惯了便捷友好的图形化界面 , 以及经历了对“系统在干什么”一无所知的恐惧之后 , 那么接下来 Linux 就带来了另一个极端的体验 , 知道系统在做什么 , 但是总是觉得不那么便捷而友好(刚开始很长一段时间都没有接触 Linux 图形界面) 。我记得大致有这么一句话 , “Linux is user friendly, but it is selective who its friends are.” , Linux 也是对用户朋友友好的 , 只不过对谁是它的朋友比较挑剔 。既霸气 , 又高傲是不是?于是 Linux 党和 Windows 党见面就掐 。
好 , Mac 时间到了——既能够体会到便捷和友好(有过之无不及) , 又能够让我清楚地知道操作系统在干什么 , 和 Linux 的同源又可以带来系统和应用管理的亲切感 。这也是我觉得为什么程序员的开发环境已经从若干年前的 Windows 一统天下到现在大部分被 Mac 蚕食的一个最主要原因 。
如果你和我一样 , 先接触的 Linux , 再迁移到 Mac , 可能会在第一时间去寻找类似于 Linx 上的包安装管理工具 。比如说 rpm(for Redhat , 如果是 Debian 那会是 dpkg) 。不过和 rpm 相比 , Yum 会是更有名的那一个 , 包仓库、依赖管理等等都被引入(如果是 Debian 的话 apt-get 是类似的) 。下图来自 这篇 文章 。
之后就知道了大名鼎鼎的 Homebrew 。它是 Mac 上包管理工具毫无疑问的老大 。简洁 , 清晰 , 使用方便 , 而且有很多实用的功能 。比如“brew doctor” , 帮忙修正一些潜在的问题 , 比如这样的 , 连解决方法都给出了:
Warning: The following directories are not writable:/usr/local/bin/usr/local/libThis can happen if you "sudo make install" software that isn’t managedby Homebrew. If a formula tries to write a file to this directory, theinstall will fail during the link step.You should change the ownership of these directories to your account. sudo chown -R $(whoami) /usr/local/bin /usr/local/lib还有这样的 , 连问题单链接都附上了:
Warning: A .pydistutils.cfg file was found in $HOME, which may cause Python
builds to fail. See:
https://bugs.python.org/issue6138
https://bugs.python.org/issue4655

但是 , 和很多 Linux 版本上的包管理工具不同的是 , 它是有同级别的竞争对手的——它就是 MacPorts 。功能上 , 二者类似
安装上面 , 由于 Homebrew 是 Ruby 写的 , 而 Ruby 已经在 Mac 上预装了 , 因此安装一行命令就搞定了:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

反观 MacPorts(据说有着最多的包) , 是用 C 和 TCL 写的 , 得下载 pkg 包 , 然后再自行安装(好像更像 Windows 一点) 。它和 Homebrew 比起来 , 把所有的依赖包都重新下载到本地 , 而不是重用系统中已有的库——这有利有弊 , 好的一面是不容易发生冲突 , 也不容易发生一些库本身不可靠带来的乱七八糟的问题 , 坏的一面是这些库要重下 , 慢而且占用更多空间 。
题外话 , 偶然看到 Stack Overflow 上面有人支持 MacPorts 的时候 , 吐槽了一下 Homebrew , 哈哈:
Rubists like to rewrite everything in Ruby, because the only thing they are at ease is Ruby itself.
Mac 上的最后一个 , 我也是才知道的 , fink 。它对于 Debian 上过来的用户亲和力是最好的 , 可以下载预编译好的二进制包 , 也可以在 Mac 上现做现卖 , 从源代码编译开始 。
上面说的都是基于某个操作系统的包安装管理工具 , 其实还有一些别的维度下的包安装管理工具 。比如基于某种编程语言的包安装管理工具 。

推荐阅读