相信用过 Linux 的朋友一定会对各个发行版的包管理器印象深刻,例如 Debian 的 apt,Arch Linux 的 pacman,以及 NixOS 的 Nix,包管理器解决了软件的安装、更新、依赖检查等问题,使得系统用起来会省心不少。
那么 Windows 系统上有类似的包管理器吗?抱歉,官方没有专门的包管理器,也许 NuGet 算一个(Microsoft Apps Store 可称不上包管理)。Wait,Windows 需要包管理器吗?直接各个软件官网下载安装包一路点击“下一步”到底,根本不需要包管理器。然而对于我来说,我有一些额外需求:
- 软件能集中管理:统一安装在某个位置便于集中管理。
- 软件安装、更新、卸载方便。
- 环境变量和注册表配置省心。
以上需求主要针对一些工作学习用软件,例如 emacs / vim 和 各种语言的解释器安装包(docker也许更方便省事?)等。浏览器这种我就让其放飞自由了 😅。 Windows 上的非官方包管理器现在比较知名的应该是 Chocolatey 和 Scoop。我之前一直用 Chocolatey 来管理一些工作软件,直到最近装机开始转投 Scoop。
Chocolatey 基于 NuGet,软件仓库内软件包丰富,软件仓库还有一定程度的审核机制,维护人员也挺活跃。整体上我觉得 Chocolatey 会比较适合 IT 批量部署。我觉得使用上的不足有:
- 需要 Administrative Priviledges:安装、更新、卸载都涉及 Admin 的权限想想就头疼。当然 Chocolatey 也有 Non-Administrative 的安装方法。
- 软件配置不够透明灵活:包括环境变量和注册表配置等,也包括自己要更新软件仓库的配置繁琐。
Scoop 除了限制在 PowerShell 中运行外,其余要比 Chocolatey 更加灵活:
- 软件仓库被称为 Buckets,除了可以使用预置的一些 Buckets 之外,还可以自己创建 Buckets。
- 只需要普通用户权限,所有软件安装在对应用户的指定位置。
关于 Scoop 和 Chocolatey 具体区别可以查看 Scoop and Chocolatey Comparison。
根据我自己的需求,Scoop 相比 Chocolatey 更让我省心。
Scoop 默认将软件安装在 ~/scoop/ 路径上,管理和查看都很方便。Scoop 默认带的 Buckets 包含了大部分常用软件。同时也可以自行添加他人的 Buckets 或者自建 Buckets。我也曾想过用自建 Buckets 当作定制软件列表,下次再折腾系统时直接一波流。后来想了一下这么做太费劲还要维护软件版本就放弃了。当然在 Buckets 维护软件版本也很简单,遵循规定的 JSON 格式即可,这和 MacOS 上的 Homebrew 就很像了。