第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 小结

包管理工具是现代开发的基石。你不需要记住所有命令,但一定要理解它们的核心逻辑:

  1. 每个工具管理自己生态内的软件包
  2. 换源是提升下载速度的最有效手段
  3. 不要混用不同层级的包管理工具
  4. 虚拟环境是你的好朋友

嗯,这一章就到这里。下一章我们会聊聊更具体的组件安装实战,到时候我会拿几个真实项目来举例。