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 避坑指南与最佳实践
最后,分享几个我踩过的坑:
- 不要用sudo装Python包:用
pip install --user或者创建虚拟环境。我曾经用sudo装了个包,结果把系统Python搞坏了,重装了系统才修好。 - 定期清理缓存:包管理器会下载缓存文件,时间长了能占好几个G。apt用
apt clean,Homebrew用brew cleanup。 - 锁定版本:生产环境一定要锁定包版本。apt可以用
apt-mark hold,Homebrew可以用brew pin。 - 不要混用包管理器:同一个软件,要么全用apt装,要么全用源码编译。混着来容易出依赖冲突。
嗯,包管理器这块就这些。说白了,选一个你顺手的,用熟它。别今天换这个明天换那个,浪费时间。工具是拿来用的,不是拿来折腾的。