个人技术站点JASONWU

Keep Coding


  • 主页

  • 文章

  • 搜索

Python 环境管理一体化:uv VS pip/venv

新建: 2025-08-03 编辑: 2025-08-05   |   分类: 后端开发   | 字数: 1843 字

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 版本管理
pipPython 官方包管理器速度中等;仅限包管理;无虚拟环境管理;需手动创建 venv
venv虚拟环境管理器(Python 标准库自带)仅限虚拟环境创建与管理;无包管理功能;需手动激活虚拟环境

6. 总结

  • uv 适合追求高效、一体化、现代项目管理的开发者,特别是新项目、多人协作、大依赖树的工程
  • pip + venv 经典组合,适合小型项目或已有 pip、venv 依赖的老项目
  • 可逐步从 pip + venv 迁移到 uv,享受更快的依赖管理和更好的开发体验
#Python# #包管理器#

文章:Python 环境管理一体化:uv VS pip/venv

链接:https://www.wuxianjie.net/posts/backend/py-uv/

作者:吴仙杰

文章: 本博客文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议,转载请注明出处!

SQL Server 变量声明与赋值
Bash 命令行提效
  • 文章目录
  • 站点概览
吴仙杰

吴仙杰

🔍 Ctrl+K / ⌘K

27 文章
9 分类
25 标签
邮箱 GitHub
  • 1. 引言
  • 2. 传统项目管理方式:pip/venv
  • 3. 现代项目管理方式:uv
  • 4. uv 无缝兼容老项目
  • 5. uv VS pip/venv
  • 6. 总结
© 2021-2025 吴仙杰 保留所有权利 All Rights Reserved
浙公网安备 33010302003726号 浙ICP备2021017187号-1
0%