1. pip 是什么?和 apt 有啥不一样?
- apt :管理的是系统层面的软件包(Ubuntu/Debian 的
.deb包),安装在系统路径里(通常/usr/bin、/usr/lib等),受操作系统包管理器管理。 - pip :管理的是 Python 生态里的第三方包(从 Python 官方仓库 PyPI 下载),只针对 Python 环境,不管系统软件。
可以先建立一个映射关系:
| 你想做的事 | 用 apt | 用 pip |
|---|---|---|
| 安装一个包 | apt install |
pip install |
| 升级一个包 | apt upgrade |
pip install -U / --upgrade |
| 卸载一个包 | apt remove |
pip uninstall |
| 查看已安装的包 | apt list --installed |
pip list |
| 查包信息 | apt show |
pip show |
| 按关键字搜索 | apt search |
pip search(已废弃,推荐用网页) |
注意:pip search 已经在新版本中禁用,后面会解释怎么替代。
2. 先说最重要的:用对 pip 的"来源"
一般不要直接用 pip 这个命令,而是:
- 对 Python 3:
python3 -m pip ... - 对具体虚拟环境:
<venv>/bin/python -m pip ...
原因:
- 不同 Python 版本自带不同的 pip(python3.8、python3.10 各自有一个 pip)。
- 不同虚拟环境之间要隔离依赖,直接敲
pip有时候会跑到系统 Python 上。
常用写法建议:
bash
# 系统的 Python 3
python3 -m pip install requests
# 当前虚拟环境
python -m pip install requests
只要记住一句话:尽量用 python -m pip 而不是裸的 pip。
3. 安装包:pip install
3.1 基本用法
bash
python3 -m pip install 包名
例子:
bash
python3 -m pip install requests
python3 -m pip install numpy pandas
类比 apt:
bash
apt install curl
apt install curl git
3.2 指定版本 / 版本范围
常用写法:
bash
# 指定精确版本
pip install requests==2.31.0
# 安装大于等于某版本
pip install requests>=2.31.0
# 安装版本区间
pip install "requests>=2.25,<3.0"
注意:>=,< 一般要加引号,防止被 shell 解释。
3.3 从 requirements.txt 安装
类似于 "apt 一次装一堆",pip 也常用清单文件:
requirements.txt 内容例如:
txt
requests==2.31.0
numpy>=1.23,<2.0
pandas
安装:
bash
python3 -m pip install -r requirements.txt
-r:from requirements file。
3.4 常用安装参数
-
-U/--upgrade:升级到最新版本bashpip install -U requests -
--force-reinstall:强制重装 -
--no-deps:只装这个包,不装依赖(一般调试时才用) -
--user:安装到当前用户目录(~/.local/lib/...),不动系统目录bashpip install --user requests
3.5 换国内镜像源(加速)
一次性临时使用(推荐先这样用):
bash
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
常见镜像:
- 清华:
https://pypi.tuna.tsinghua.edu.cn/simple - 阿里:
https://mirrors.aliyun.com/pypi/simple/ - 豆瓣:
https://pypi.doubanio.com/simple/
全局配置(以 Linux 为例):
bash
mkdir -p ~/.config/pip
cat > ~/.config/pip/pip.conf << 'EOF'
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
EOF
4. 升级、卸载:pip install -U / pip uninstall
4.1 升级单个包
bash
pip install -U requests
4.2 升级 pip 自己
bash
python3 -m pip install -U pip
有些系统不建议用 root 升级系统自带 pip,安全起见最好在虚拟环境里升级。
4.3 卸载包
bash
pip uninstall 包名
pip uninstall requests
会提示确认,支持一次卸载多个:
bash
pip uninstall requests urllib3
5. 查看已安装的包、包信息:pip list / pip show
5.1 pip list:类似 apt list --installed
bash
pip list
常搭配参数:
-
--outdated:只看有新版本的包bashpip list --outdated -
--format=columns(默认)或--format=json:输出格式。
5.2 pip show:类似 apt show
bash
pip show requests
输出信息包括:
- Name、Version
- Location(安装路径)
- Requires(依赖了哪些包)
- Required-by(被哪些包依赖)
6. "搜索"包:pip search 不能用怎么办?
6.1 为何 pip search 失效?
新版本 pip 中 pip search 已被禁用,因为:
- 对 PyPI 服务器压力太大
- 功能弱,社区几乎都改用 web 搜索
如果你现在执行:
bash
pip search xxx
一般会看到:
ERROR: XMLRPC is deprecated or disabled
6.2 推荐的替代方案
- 直接上网页
- https://pypi.org
搜索栏里输入关键字即可,信息比pip search全得多。
- https://pypi.org
- 配合浏览器 / 搜索引擎
- 搜 "python xxx library" 或 "pypi xxx"
- 一些三方工具(如
pip_search等),但都不是 pip 自带的,稳定性各不相同,一般不强推。
实际开发中,大多数人已经不再用 pip search,而是习惯用 PyPI 网页 / 搜索引擎来找包名。
7. pip 和虚拟环境 venv / virtualenv
这部分是使用 pip 时最容易"踩坑"的地方。
7.1 为什么需要虚拟环境?
如果你全部在系统 Python 下用 pip:
- 项目 A 需要
Django==2.2 - 项目 B 需要
Django==4.0
这时候你就会陷入"版本地狱":同一台机器上不同项目依赖冲突。
虚拟环境就是为每个项目准备一套独立的 "Python + pip + 包目录",互不干扰。
7.2 用 venv 创建虚拟环境
Python 3 自带 venv 模块。
bash
# 进入你的项目目录
cd myproject
# 创建虚拟环境 .venv 目录
python3 -m venv .venv
激活虚拟环境:
-
Linux / macOS:
bashsource .venv/bin/activate -
Windows(PowerShell):
powershell.\.venv\Scripts\Activate.ps1
激活后,命令行前面会出现类似 (venv) 的前缀,这时:
python指向虚拟环境中的 Pythonpip指向虚拟环境中的 pip
此时你就可以直接用:
bash
pip install requests
或更安全一点:
bash
python -m pip install requests
退出虚拟环境:
bash
deactivate
7.3 常见使用流程示例
bash
mkdir myproject
cd myproject
# 建 venv
python3 -m venv .venv
# 激活
source .venv/bin/activate # Windows 按上面那个指令
# 安装依赖
pip install requests flask
# 生成 requirements.txt(记录当前依赖)
pip freeze > requirements.txt
# 将项目和 requirements.txt 一起提交/备份
以后在另一台机器上:
bash
git clone ...
cd myproject
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
就能复现同样的环境。
8. requirements.txt 与依赖管理:pip freeze
8.1 生成当前环境依赖清单
bash
pip freeze > requirements.txt
pip freeze 输出类似:
txt
click==8.1.7
Flask==2.3.2
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.3
Werkzeug==2.3.6
这和 pip list 不同:
pip list是面向人看的:表格形式、只列顶层依赖。pip freeze是面向机器的:固定版本、包括所有直接 + 间接依赖,适合写入文件再用pip install -r还原。
8.2 常见工作流
开发时:
- 手动
pip install flask requests等。 - 阶段性
pip freeze > requirements.txt更新依赖锁定。 - 部署到服务器 / CI 时:
pip install -r requirements.txt。
9. 常用参数汇总(类比 apt 使用感)
下面整理一些常用参数,选几个最实用的:
9.1 安装相关
bash
pip install 包名 # 安装最新版本
pip install 包名==1.2.3 # 安装指定版本
pip install "包名>=1.0,<2.0" # 安装版本区间
pip install -U 包名 # 升级包
pip install -r requirements.txt # 从清单安装
pip install --user 包名 # 装到当前用户目录
pip install -i 镜像URL 包名 # 指定镜像源
9.2 管理与查询
bash
pip uninstall 包名 # 卸载
pip list # 列出已安装包
pip list --outdated # 列出有新版本的包
pip show 包名 # 查看包详情
pip freeze # 以可复现格式输出依赖
pip freeze > requirements.txt # 生成依赖锁定文件
10. 常见问题与坑
10.1 pip 和 apt 混用安装 Python 包会怎样?
例如:
bash
apt install python3-requests
pip install requests
这可能导致:
- 系统包(apt)和 pip 包混在同一个目录里;
- 某次
pip install -U把 apt 安装的版本覆盖,apt 自己却不知道; - 系统工具依赖的 Python 包被你不小心升级 / 卸载,造成系统脚本报错。
建议:
- 系统级工具(比如
certbot、ansible)用apt install即可。 - 自己的应用和项目,用
venv + pip,不要用apt install python3-xxx。
10.2 pip 指向的是哪个 Python?
可以用:
bash
which pip
pip --version
输出类似:
txt
pip 23.x from /home/user/.local/lib/python3.10/site-packages/pip (python 3.10)
- 看路径就知道是在系统 Python 还是虚拟环境。
- 不确定时,用
python3 -m pip最保险。
10.3 权限 / sudo 问题
不建议频繁:
bash
sudo pip install ...
更好的方式:
-
普通用户 +
--userbashpip install --user 包名 -
或使用虚拟环境(推荐)。
11. 如果你会 apt,如何快速把"肌肉记忆"迁移到 pip?
给你一个对照表,方便记忆:
| 场景 | apt 命令 | pip 命令 |
|---|---|---|
| 安装一个包 | apt install foo |
pip install foo |
| 安装多个包 | apt install foo bar |
pip install foo bar |
| 升级一个包 | apt install --only-upgrade foo |
pip install -U foo |
| 升级包管理器自身 | apt install apt(一般跟随系统更新) |
python3 -m pip install -U pip |
| 卸载包 | apt remove foo |
pip uninstall foo |
| 列出已安装的包 | apt list --installed |
pip list |
| 查包信息 | apt show foo |
pip show foo |
| 只输出可机读依赖 | (apt 没直接对应) | pip freeze |
| 根据清单安装 | (类似 xargs apt install) |
pip install -r requirements.txt |
| 换源 | 改 /etc/apt/sources.list |
pip install -i 镜像URL 包名 / 配置 pip.conf |
| 搜索包 | apt search foo |
用浏览器打开 https://pypi.org 搜索(pip search 废弃) |