1. 引言
过去,Python 的包和环境管理需要分别用 pip
和 venv
,流程繁琐且速度较慢。
现在,Rust 实现的新工具 uv
,将包管理和虚拟环境合为一步,安装依赖更快,还自动生成依赖锁文件。
🐍 传统 Python 环境与依赖管理
Bash
1python3 -m venv .venv # 创建虚拟环境
2source .venv/bin/activate # 激活虚拟环境
3pip install flask requests # 安装项目依赖
🚀 使用 uv 一步到位
Bash
1uv init my_project # 初始化项目,同时自动配置虚拟环境与依赖管理
2uv add flask requests # 添加依赖,自动解析并加锁依赖
✨ 通过 uv
,Python 项目环境搭建和依赖管理就像 npm
/yarn
一样简单高效,大大提升开发体验!
2. 传统项目管理方式:pip/venv
Bash
1# 创建项目目录
2mkdir old_school
3
4# 进入项目目录
5cd old_school
6
7# 创建虚拟环境
8python3 -m venv .venv
9
10# 激活虚拟环境
11source .venv/bin/activate
12
13# 在虚拟环境中安装依赖
14pip install flask requests
15
16# 创建 Python 文件
17touch main.py
18
19# 将当前环境的依赖导出到 requirements.txt
20pip freeze > requirements.txt
21
22# 退出虚拟环境
23deactivate
24
25# 团队协作时,只需共享项目目录和依赖文件(如 requirements.txt)
26# 1. 在其他机器上克隆项目
27# 2. 本地新建虚拟环境
28# 3,激活虚拟环境
29# 4. 安装依赖
30pip install -r requirements.txt
项目目录结构
Bash
1$ tree -a -L 1 .
2.
3├── .venv # 虚拟环境目录(virtual environment),用于隔离项目依赖环境
4├── main.py # Python 主程序文件
5└── requirements.txt # 依赖列表文件(dependency list),列明依赖及精确版本
6
72 directories, 2 files
3. 现代项目管理方式:uv
Bash
1# 初始化一个新项目
2# `uv init --app`(默认):创建应用程序,偏向于写代码直接运行(如 Web 项目、脚本等)
3# `uv init --lib`:创建库,主要用于开发可以被其他项目导入和分发到 PyPI 的代码库
4uv init new_school
5
6# 进入项目目录
7cd new_school
8
9# 或者分两步
10mkdir new_school
11cd new_school
12uv init
13
14# 安装依赖(如无 .venv 会自动创建,并在其中安装依赖)
15uv add flask requests
16
17# 查看项目的依赖树状结构,包含全部直接和间接依赖
18uv tree
19
20# 在虚拟环境下(如无 .venv 会自动创建,无需手动激活虚拟环境)运行
21uv run main.py
22
23# 同步依赖到虚拟环境(如无 .venv 会自动创建)
24uv sync
25
26# 移除依赖,包括它的间接依赖(transitive dependency)
27uv remove flask
28
29# ===== 全局工具(全局独立安装,随时可用)=====
30# 安装全局工具(不是把包装进当前的虚拟环境,而是安装在 local bin:`which mypy`)
31uv tool install mypy
32
33# 无需进入虚拟环境,直接在终端输入命令即可运行
34mypy .
35
36# 查看所有已全局安装的工具
37uv tool list
38
39# 更新全局工具
40uv tool upgrade mypy
41
42# 把所有持久化安装的工具一键升级到各自允许的最新版,且保留环境配置
43uv tool upgrade --all
44
45# 卸载全局工具
46uv tool uninstall mypy
47
48# 在隔离的临时环境中运行:不会持久安装,也和项目环境解耦,仅限这一次运行
49uv tool run mypy .
50
51# 或其等价快捷命令 uvx,类似于 `pipx run --no-cache <pkg>` 或 `npx <pkg>` 等
52uvx mypy .
项目目录结构
Bash
1$ tree -a -L 1 .
2.
3├── .git # Git 版本库目录(隐藏文件夹),存储所有提交历史和分支等元数据
4├── .gitignore # Git 忽略规则文件,列出需被忽略(不纳入版本控制)的文件或文件夹
5├── .python-version # Python 版本文件,供工具(如 pyenv)管理 Python 解释器版本
6├── .venv # 虚拟环境目录
7├── main.py # Python 主程序文件
8├── pyproject.toml # Python 项目配置文件,定义依赖、构建工具等
9├── README.md # 项目说明文档,便于开发者了解和使用项目
10└── uv.lock # 依赖锁定文件,锁定了所有依赖的具体版本
11
123 directories, 7 files
4. uv 无缝兼容老项目
uv
不但兼容 pip
生态,还能利用 uv
的高性能和智能管理,让开发者可以平滑过渡并直接受益于这些改进。
Bash
1cd old_school
2
3# ===== uv 的 pip 兼容接口 =====
4# 等同于 `pip install`,但更快且自动处理虚拟环境
5uv pip install requests
6
7# 等同于 `pip list`
8uv pip list
9
10# 等同于 `pip freeze`
11uv pip freeze > requirements.txt
12
13# ===== 从传统的 pip/venv 项目迁移到 uv 的现代管理方式 =====
14# 1. 初始化 uv 项目结构
15# 在当前项目目录中生成 pyproject.toml 和 uv.lock,但不自动添加依赖
16uv init
17
18# 2. 导入旧依赖
19# 自动解析并迁移你原有的依赖列表 requirements.txt 到 pyproject.toml
20uv add -r requirements.txt
21
22# 3. 重建虚拟环境
23rm -rf .venv # 删除原虚拟环境
24uv venv # 用 uv 创建新虚拟环境
25
26# 4. 环境同步与锁定
27# 按 pyproject.toml + uv.lock 安装所有依赖
28uv sync
29
30# 5. 验证并清理无用旧文件
31# 依赖管理建议长期用 pyproject.toml 和 uv.lock,旧 requirements.txt 可删除
5. uv VS pip/venv
工具 | 功能定位 | 主要特点 |
---|---|---|
uv | 一站式包&项目管理器(Rust 实现) | 速度极快;依赖锁定;自动 venv 管理;支持全局工具;项目初始化;多 Python 版本管理 |
pip | Python 官方包管理器 | 速度中等;仅限包管理;无虚拟环境管理;需手动创建 venv |
venv | 虚拟环境管理器(Python 标准库自带) | 仅限虚拟环境创建与管理;无包管理功能;需手动激活虚拟环境 |
6. 总结
uv
适合追求高效、一体化、现代项目管理的开发者,特别是新项目、多人协作、大依赖树的工程pip + venv
经典组合,适合小型项目或已有pip
、venv
依赖的老项目- 可逐步从
pip + venv
迁移到uv
,享受更快的依赖管理和更好的开发体验