第3章:包管理工具入门:apt/yum/pip/npm/cargo 的基本概念与选择
说实话,我刚入行那会儿,装软件全靠去官网下载源码包,然后 ./configure && make && make install 三连。那时候哪有什么包管理工具,装个库能折腾一上午。现在想想,真是幸福多了。
包管理工具,说白了就是帮你解决「软件依赖」这个头疼问题的。你装一个软件,它可能依赖十个库,这十个库又依赖另外二十个库。手动去搞?我试过,真的会疯掉。
3.1 系统级包管理:apt 与 yum
这两个是操作系统层面的包管理工具。apt 用在 Debian/Ubuntu 系,yum 用在 CentOS/RHEL 系。它们管理的是系统全局的软件包,比如 gcc、nginx、python3 这些。
apt 的基本操作
# 更新软件源缓存
sudo apt update
# 安装软件包
sudo apt install nginx
# 卸载软件包
sudo apt remove nginx
# 搜索软件包
apt search python3
yum 的基本操作
# 更新缓存
sudo yum makecache
# 安装
sudo yum install nginx
# 卸载
sudo yum remove nginx
# 搜索
yum search python3
我的习惯:我个人习惯在装完系统后,第一件事就是换国内源。不然 apt update 能卡到你怀疑人生。我曾经在海外服务器上忘了换源,结果装个 vim 等了五分钟。
3.2 语言级包管理:pip / npm / cargo
这些是编程语言自带的包管理工具。它们管理的是该语言生态内的第三方库。
| 工具 | 语言 | 配置文件 | 典型命令 |
|---|---|---|---|
| pip | Python | requirements.txt | pip install flask |
| npm | Node.js | package.json | npm install express |
| cargo | Rust | Cargo.toml | cargo add serde |
pip 使用示例
# 安装包
pip install requests
# 从 requirements 文件安装
pip install -r requirements.txt
# 查看已安装包
pip list
npm 使用示例
# 初始化项目
npm init -y
# 安装包并保存到 dependencies
npm install lodash --save
# 安装全局工具
npm install -g typescript
cargo 使用示例
# 创建新项目
cargo new my_project
# 添加依赖
cargo add serde --features derive
# 构建项目
cargo build --release
注意:千万不要用 sudo pip install 装包!我曾经这么干过,结果系统自带的 Python 环境被搞乱了,连 apt 都报错。pip 装包请用虚拟环境,或者 --user 参数。
3.3 仓库源配置与国内镜像加速
为什么要换源?你想想看,默认的源服务器都在国外。从国内访问,那速度...嗯,懂的都懂。换源之后,下载速度能从几十 KB/s 飙升到几十 MB/s。
apt 换源(Ubuntu 为例)
# 备份原配置
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 编辑 sources.list
sudo vim /etc/apt/sources.list
# 替换为清华源内容(以 Ubuntu 22.04 为例)
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# 更新缓存
sudo apt update
pip 换源
# 临时使用
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
# 永久配置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
npm 换源
# 查看当前源
npm config get registry
# 设置为淘宝源
npm config set registry https://registry.npmmirror.com
# 或者使用 nrm 管理
npm install -g nrm
nrm use taobao
cargo 换源
# 编辑 ~/.cargo/config.toml
[source.crates-io]
replace-with = 'tuna'
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
核心要点:换源的本质就是修改包管理工具的下载地址。不同的工具,配置方式不同,但思路是一样的——把默认的国外源替换成国内的镜像站。
3.4 如何选择合适的包管理工具
这个问题其实很简单:
- 装系统软件 → 用 apt 或 yum
- 装 Python 库 → 用 pip
- 装 Node.js 库 → 用 npm
- 装 Rust 库 → 用 cargo
但有个坑要注意:有些软件既可以通过 apt 装,也可以通过 pip 装。比如 python3-pip 这个包。我建议优先用系统包管理工具装,因为它会处理好系统级的依赖。只有在系统源里没有的包,才用 pip 装。
避坑指南:我曾经在 Ubuntu 上同时用 apt 和 pip 装了同一个库的不同版本,结果 Python 程序跑起来各种报错。后来我养成了习惯:项目级的依赖用虚拟环境管理,系统级的依赖用 apt 管理,两者互不干扰。
3.5 小结
包管理工具是现代开发的基石。你不需要记住所有命令,但一定要理解它们的核心逻辑:
- 每个工具管理自己生态内的软件包
- 换源是提升下载速度的最有效手段
- 不要混用不同层级的包管理工具
- 虚拟环境是你的好朋友
嗯,这一章就到这里。下一章我们会聊聊更具体的组件安装实战,到时候我会拿几个真实项目来举例。