4、包管理器:Windows上的Chocolatey/Winget,macOS上的Homebrew,Linux上的apt/yum/pacman

说到搭建开发环境,包管理器绝对是个绕不开的话题。我个人习惯,拿到一台新电脑,第一件事不是装IDE,而是先把包管理器搞定。为什么?因为后面所有的工具、库、依赖,都得靠它来管。

说白了,包管理器就是你的「软件管家」。只不过这个管家不弹广告,不捆绑安装,而且全自动运行。你想想看,手动去官网下载安装包,一路点「下一步」,再配置环境变量……一套下来十分钟就没了。而用包管理器,一行命令,搞定。

4.1 为什么需要包管理器?

我在项目中遇到过好几次这样的场景:团队里三个人,装同一个工具,结果版本不一样,环境变量路径也不一样。最后代码在我这跑得好好的,到同事那就报错。排查了半天,发现是依赖库版本对不上。

包管理器能解决三个核心问题:

  • 版本统一:指定版本号,所有人装的一样
  • 依赖自动处理:装A的时候,自动把B、C、D一起装好
  • 卸载干净:不会留下残留文件和注册表垃圾

核心观点:包管理器不是「可选项」,而是「必需品」。尤其是做脚本工具开发,依赖管理做不好,后面全是坑。

4.2 Windows:Chocolatey vs Winget

Windows用户以前挺苦的,装个Python都得去官网手动下。现在好了,有两个选择:Chocolatey(老牌)和 Winget(微软官方)。

Chocolatey

这是我最早在Windows上用的包管理器。它的安装方式有点意思——用PowerShell跑一段脚本:

Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

嗯,这里要注意:执行策略要改成Bypass,不然脚本跑不起来。我第一次装的时候就卡在这步,折腾了十分钟才发现是权限问题。

装好之后,装软件就简单了:

choco install python
choco install git
choco install vscode

Chocolatey的包库很全,基本上你能想到的开发工具都有。而且它支持自动更新:

choco upgrade all

一行命令,所有软件升到最新版。

Winget

Winget是微软官方出的,Windows 10 1809以上版本自带。如果你用的是最新版Windows,其实不用额外安装。

winget install Python.Python
winget install Git.Git
winget install Microsoft.VisualStudioCode

我个人觉得Winget的优势在于:

  • 官方出品,安全性有保障
  • 不需要额外安装,系统自带
  • 支持图形界面,可以在Microsoft Store里搜到

但缺点也很明显:包库没有Chocolatey全。有些小众工具,Winget上找不到,还得用Chocolatey。

我的建议:两个都装上。日常用Winget,遇到找不到的包再用Chocolatey。互不冲突。

4.3 macOS:Homebrew

macOS用户基本绕不开Homebrew。它自称「The missing package manager for macOS」——说白了,就是苹果系统缺的那个包管理器。

安装很简单:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

装好之后,常用的命令就这几个:

brew install python
brew install git
brew install wget

Homebrew有个很贴心的设计:它会把软件装到自己的目录(/usr/local或/opt/homebrew),不会污染系统自带的库。我曾经手贱用系统自带的Python,结果升级macOS之后,脚本全炸了。从那以后,我所有工具都用Homebrew装。

另外,Homebrew还有个「cask」的概念,用来装图形界面软件:

brew install --cask google-chrome
brew install --cask visual-studio-code

嗯,这里要注意:M1/M2芯片的Mac,Homebrew的安装路径是/opt/homebrew,不是/usr/local。配置环境变量的时候别搞错了。

避坑指南:我曾经在M1 Mac上装Homebrew,忘了加arch参数,结果装出来的全是x86版本,性能损失很大。正确做法是:arch -arm64 brew install xxx

4.4 Linux:apt / yum / pacman

Linux的包管理器,说白了就是发行版自带的。不同发行版用的不一样:

发行版 包管理器 包格式 常用命令
Debian / Ubuntu apt .deb apt install / apt remove
CentOS / RHEL yum / dnf .rpm yum install / yum remove
Arch Linux pacman .pkg.tar.zst pacman -S / pacman -R
openSUSE zypper .rpm zypper install / zypper remove

我个人最常用的是Ubuntu,所以apt用得最多。基本操作就这几条:

# 更新包列表
sudo apt update

# 安装软件
sudo apt install python3 python3-pip

# 卸载软件
sudo apt remove python3

# 清理缓存
sudo apt autoremove

为什么先要apt update?因为apt的包列表是本地缓存的,不更新的话,可能装不到最新版本。我刚开始用Linux的时候,经常忘了这步,结果装了个老版本,编译报错查了半天。

Arch Linux的pacman稍微有点不同,它的命令风格更简洁:

# 安装
sudo pacman -S python

# 卸载
sudo pacman -R python

# 更新系统
sudo pacman -Syu

你想想看,-S是同步(sync),-R是移除(remove),-Syu是同步并更新。记住这几个,基本够用了。

核心建议:不管你用什么Linux发行版,先搞清楚它的包管理器是什么。然后记住三个命令:安装、卸载、更新。其他的用到再查。

4.5 跨平台包管理器的选择策略

如果你像我一样,Windows、macOS、Linux三平台来回切换,那包管理器的选择就有点讲究了。我的策略是这样的:

  • Windows:Winget为主,Chocolatey为辅
  • macOS:Homebrew,没有第二个选择
  • Linux:用发行版自带的,别折腾

但有个问题:不同平台的包管理器,命令不一样。你总不能每次换系统都去查命令吧?

我的解决方案是:写一个统一的安装脚本。比如:

# install_tools.sh
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
    sudo apt install python3 git vim
elif [[ "$OSTYPE" == "darwin"* ]]; then
    brew install python git vim
elif [[ "$OSTYPE" == "msys" ]]; then
    winget install Python.Python Git.Git
fi

这样不管换到哪个平台,跑一下脚本,环境就搭好了。省心。

小技巧:把常用的包列在一个文本文件里,比如packages.txt。然后写个脚本循环安装。这样新增工具时,只需要改文本文件,不用改脚本。

4.6 避坑指南与最佳实践

最后,分享几个我踩过的坑:

  1. 不要用sudo装Python包:用pip install --user或者创建虚拟环境。我曾经用sudo装了个包,结果把系统Python搞坏了,重装了系统才修好。
  2. 定期清理缓存:包管理器会下载缓存文件,时间长了能占好几个G。apt用apt clean,Homebrew用brew cleanup
  3. 锁定版本:生产环境一定要锁定包版本。apt可以用apt-mark hold,Homebrew可以用brew pin
  4. 不要混用包管理器:同一个软件,要么全用apt装,要么全用源码编译。混着来容易出依赖冲突。

嗯,包管理器这块就这些。说白了,选一个你顺手的,用熟它。别今天换这个明天换那个,浪费时间。工具是拿来用的,不是拿来折腾的。