Skip to content

05-pip包管理

Python 3.11+

概念铺垫

5.1 什么是 pip

实际场景

你想用 Python 做数据分析,听说有个叫 pandas 的库很好用。但你的 Python 里没有这个库,直接 import pandas 会报错 ModuleNotFoundError

问题:如何安装别人开发的 Python 库?

概念说明

pip 是 Python 的包管理工具,用于安装和管理第三方库。

注意: 2026年起,推荐使用 uv 作为包管理工具(速度快10-100倍)。本章保留pip介绍,用于维护老项目。


5.2 pip vs uv:如何选择

特性pipuv
速度基准10-100倍快
依赖解析慢,可能冲突快速准确
虚拟环境需要venv内置支持
锁文件需要pip-tools自动生成
Python版本管理不支持支持
兼容性广泛广泛

何时使用 pip

  • 维护老项目(已使用pip)
  • CI/CD环境已配置pip
  • 教学演示基础概念

何时使用 uv(推荐)

  • 新项目
  • 需要快速安装依赖
  • 追求现代工具链
  • 需要Python版本管理

5.3 版本 specifier

符号含义示例
==精确版本requests==2.28.0
!=不等于requests!=2.28.0
>=大于等于requests>=2.28.0
<=小于等于requests<=2.28.0
>大于requests>2.28.0
<小于requests<2.28.0
~=兼容版本requests~=2.28.0
===任意版本requests===2.28.0

虚拟环境

5.10 venv(Python 内置)

虚拟环境为每个项目创建独立的 Python 运行环境,避免不同项目的依赖互相冲突。


L1 理解层:会用

基本命令

bash
# 推荐:使用 uv 安装包(更快)
uv add pandas numpy matplotlib

# 传统:使用 pip 安装包
pip install pandas numpy matplotlib

# 查看已安装的包
pip list

# 导出依赖列表
pip freeze > requirements.txt

安装包

bash
# 推荐:使用 uv 安装(更快)
uv add requests

# 传统:使用 pip 安装
pip install requests

# 安装指定版本
uv add requests==2.28.0
pip install requests==2.28.0

# 安装版本范围
pip install "requests>=2.28.0,<3.0.0"

# 安装兼容版本
pip install requests~=2.28.0  # >=2.28.0, <2.29.0

从不同来源安装

bash
# 从 PyPI 安装(默认)
pip install requests

# 从指定索引安装(国内镜像加速)
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

# 从 Git 仓库安装
pip install git+https://github.com/psf/requests.git

# 从本地目录安装
pip install ./my-package

# 从 requirements.txt 安装
pip install -r requirements.txt
uv pip install -r requirements.txt

安装选项

bash
# 升级已安装的包
pip install --upgrade requests

# 安装开发版本
pip install --pre requests

# 只安装,不缓存
pip install --no-cache-dir requests

# 安装到用户目录
pip install --user requests

卸载包

bash
# 卸载包
pip uninstall requests

# 卸载多个包
pip uninstall requests numpy pandas

# 卸载时不确认
pip uninstall -y requests

# 卸载所有包(谨慎使用)
pip freeze | xargs pip uninstall -y

查看包信息

bash
# 查看已安装的包
pip list

# 查看可升级的包
pip list --outdated

# 查看包详情
pip show requests

# 查看包的依赖
pip show requests

# 查看包的安装位置
pip show -f requests

# 搜索包(已禁用,使用 pypi.org)
# pip search requests

依赖管理

bash
# 推荐:使用 uv 自动管理
uv add requests numpy pandas
# 自动生成 uv.lock 和 pyproject.toml

# 传统:pip + requirements.txt
pip freeze > requirements.txt

# 从 requirements.txt 安装
pip install -r requirements.txt
uv pip install -r requirements.txt

requirements.txt 格式:

txt
# 注释
requests==2.28.0
numpy>=1.21.0
pandas>=1.3.0,<2.0.0
flask>=2.0

# 从 Git 安装
git+https://github.com/user/repo.git@main#egg=package

# 从本地安装
./local-package

虚拟环境操作

bash
# 创建虚拟环境
python -m venv .venv

# 激活虚拟环境
# macOS/Linux
source .venv/bin/activate

# Windows
.venv\Scripts\activate

# 退出虚拟环境
deactivate

# 删除虚拟环境
rm -rf .venv

virtualenv

bash
# 安装
pip install virtualenv

# 创建虚拟环境
virtualenv .venv

# 指定 Python 版本
virtualenv -p python3.11 .venv

使用 uv(推荐)

bash
# 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 创建新项目(自动创建虚拟环境)
uv init my-project
cd my-project

# 添加依赖
uv add requests pandas

# 运行脚本
uv run python main.py

# 或使用 uv pip 兼容模式
uv venv
uv pip install requests
uv pip install -r requirements.txt

配置 pip

bash
# 查看 pip 配置
pip config list

# 设置配置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 配置文件位置
# Unix: ~/.config/pip/pip.conf
# Windows: %APPDATA%\pip\pip.ini

pip.conf 示例

ini
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
timeout = 60

[install]
no-cache-dir = true

使用国内镜像

bash
# 临时使用
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

# 永久配置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

常用国内镜像:

镜像地址
清华https://pypi.tuna.tsinghua.edu.cn/simple
阿里云https://mirrors.aliyun.com/pypi/simple
中科大https://pypi.mirrors.ustc.edu.cn/simple
豆瓣https://pypi.douban.com/simple

迁移到 uv

安装 uv

bash
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

基本使用对比

bash
# pip 方式
python -m venv .venv
source .venv/bin/activate  # Linux/macOS
pip install requests
pip freeze > requirements.txt
python main.py

# uv 方式(推荐)
uv init my-project
cd my-project
uv add requests
uv run python main.py

pip 命令 vs uv 命令

操作pipuv
创建项目手动uv init project
创建虚拟环境python -m venv .venv自动创建
安装包pip install pkguv add pkg
安装开发依赖pip install -e .uv add --dev pkg
安装所有依赖pip install -r requirements.txtuv sync
运行脚本python script.pyuv run python script.py
导出依赖pip freeze > requirements.txt自动生成 uv.lock

从 pip 项目迁移

如果你有一个使用 pip 的老项目:

bash
# 1. 安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 2. 在项目目录初始化
cd your-project
uv init

# 3. 从 requirements.txt 安装依赖
uv add $(cat requirements.txt | tr '\n' ' ')

# 4. 使用 uv 运行
uv run python main.py

uv 的优势

  1. 速度快 - 比 pip 快10-100倍
  2. 自动管理虚拟环境 - 无需手动创建
  3. 锁定依赖 - 自动生成 uv.lock 确保可重复性
  4. Python版本管理 - uv python install 3.11
  5. 统一工具链 - 替代 pip, venv, pip-tools 等

何时继续使用 pip

  • 维护不需要频繁更新的老项目
  • 团队工作流已深度集成 pip
  • 需要使用 pip 特有的插件或功能

对于新项目,强烈推荐使用 uv


L2 实践层:用好

推荐做法

做法原因示例
每个项目使用独立的虚拟环境避免依赖冲突python -m venv .venvuv init
锁定依赖版本确保环境可再现pip freeze > requirements.txtuv.lock
新项目优先使用 uv速度快,体验好uv init my-project
使用国内镜像加速下载国内网络环境优化-i https://pypi.tuna.tsinghua.edu.cn/simple
requirements.txt 纳入版本控制团队成员共享依赖git add requirements.txt
不要全局安装项目依赖避免系统 Python 环境污染始终在虚拟环境中操作
生产环境固定版本号防止意外升级导致故障requests==2.28.0 而非 requests>=2.28.0

反模式:不要这样做

bash
# ❌ 在生产环境直接 pip install(无版本锁定)
pip install requests
# 可能安装到不兼容的新版本

# ✅ 锁定版本
pip install requests==2.28.0

# ---

# ❌ 全局安装项目依赖
sudo pip install flask  # 污染系统 Python!

# ✅ 使用虚拟环境
python -m venv .venv
source .venv/bin/activate
pip install flask

# ---

# ❌ 将 .venv/ 目录提交到 git
# .gitignore 中应包含 .venv/

# ✅ 只提交依赖文件
# 提交 requirements.txt 或 uv.lock
# .gitignore 添加 .venv/

# ---

# ❌ 在 requirements.txt 中不写版本
requests
flask
# 每次安装可能得到不同版本

# ✅ 指定版本范围或精确版本
requests==2.28.0
flask>=3.0,<4.0

# ---

# ❌ pip install 时不用 --user 覆盖系统包(非虚拟环境)
pip install --upgrade pip  # 可能破坏系统 pip

# ✅ 在虚拟环境中安全升级
source .venv/bin/activate
pip install --upgrade pip

适用场景

场景推荐原因
新建 Python 项目uv init + uv add现代工具链,速度最快
维护旧项目pip + venv兼容现有工作流
团队协作uv syncpip install -r requirements.txt统一依赖
CI/CD 环境pip install -r requirements.txt(或 uv pip install稳定可靠
快速尝试新库uv pip install <pkg>pip install <pkg>临时安装测试
国内速度慢配置清华/阿里云镜像pip config set global.index-url
Python 版本管理uv python install 3.12多版本切换方便

本章小结

┌─────────────────────────────────────────────────────────────┐
│                      pip 包管理 知识要点                      │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   安装包:                                                   │
│   ✓ pip install package                                     │
│   ✓ pip install package==version                            │
│   ✓ pip install -r requirements.txt                         │
│                                                             │
│   卸载包:                                                   │
│   ✓ pip uninstall package                                   │
│                                                             │
│   查看信息:                                                 │
│   ✓ pip list                                                │
│   ✓ pip show package                                        │
│   ✓ pip freeze > requirements.txt                           │
│                                                             │
│   虚拟环境:                                                 │
│   ✓ python -m venv .venv                                    │
│   ✓ source .venv/bin/activate                               │
│                                                             │
│   配置:                                                     │
│   ✓ pip config set                                          │
│   ✓ 国内镜像加速                                            │
│                                                             │
└─────────────────────────────────────────────────────────────┘