uv - 新一代 Python 项目与包管理器
uv 是一个现代的 Python 项目管理工具,集成包管理、虚拟环境、依赖解析与锁定、Python 版本管理、项目初始化与发布等功能
uv - 新一代 Python 项目与包管理器
📝 概述
uv 是由 Astral 团队推出的新一代 Python 项目管理工具,提供包管理、虚拟环境管理、依赖解析与锁定、Python 版本管理、项目初始化、脚本运行、构建发布等一体化能力。相较于传统的 pip/venv,它提供更快的安装速度、更智能的依赖解析以及一体化的项目工作流。
🎯 学习目标
- 了解 uv 的核心功能和定位
- 掌握 uv 的安装方法(多平台)
- 熟悉项目初始化、依赖管理、锁定与同步
- 学会管理 Python 版本与虚拟环境
- 能够使用 uv 进行脚本运行与性能对比
- 理解依赖冲突的诊断方式
📋 前置知识
- 基本的 Python 与 pip 使用经验
- 虚拟环境概念与常用命令
- 对 pyproject.toml 有初步了解
🔍 详细内容
核心特性
| 功能点 | 描述 |
|---|---|
| 包管理 | 完全替代 pip 的功能,支持安装、升级、卸载 |
| 虚拟环境管理 | 内置虚拟环境创建与管理,无需安装 virtualenv/venv |
| 依赖解析与锁定 | 智能解析依赖并生成 uv.lock 锁定文件 |
| Python 版本管理 | 自动安装和管理不同版本的 Python 解释器 |
| 项目初始化 | 通过 uv init 快速创建新项目并生成标准结构 |
| 脚本运行 | 在虚拟环境中直接运行脚本,无需手动激活 |
| 包发布 | 支持构建与发布到 PyPI 等仓库 |
安装
# On Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh
# On macOS
brew install uv
# On Windows.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# With pip.
pip install uv
快速开始:初始化项目
uv init test-uv
项目结构:
test-uv
├─ .git
├─ .gitignore
├─ .python-version
├─ README.md
├─ main.py
├─ pyproject.toml
示例 pyproject.toml:
[project]
name = "test-uv"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.9"
dependencies = []
.python-version 记录项目使用的 Python 版本:
3.10
运行脚本
# 与前端中的 `npm run dev` 类似
uv run <command>
执行逻辑: 1) 检查当前目录是否存在 .venv,如果不存在则创建 2) 校验并安装缺失依赖 3) 在当前虚拟环境中执行命令,不污染其他环境
对比:
| 执行命令 | 环境处理 |
|---|---|
| uv run xxx | 自动关联 .venv,不用手动激活 |
| python xxx.py | 依赖当前 Shell,需要手动激活虚拟环境 |
管理依赖
add - 安装依赖并更新配置
# 安装最新版
uv add requests
# 安装指定版本
uv add "flask>=2.0.0"
# 从 Git 安装
uv add git+https://github.com/psf/requests.git
说明:uv add 相当于增强版的 pip install,同时更新 pyproject.toml 与 uv.lock。
remove - 卸载依赖并更新配置
uv remove requests
sync - 按锁定文件精确还原环境
# 同步所有依赖(含 dev)
uv sync
# 仅同步生产依赖
uv sync --production
# 同步并清理多余包
uv sync --clean
lock - 生成/更新锁定文件
# 生成锁定文件
uv lock
# 只检查不写入
uv lock --check
# 强制重新解析
uv lock --update
tree - 可视化依赖树
# 显示完整依赖树
uv tree
# 指定包的依赖路径
uv tree flask
# 反向追溯依赖
uv tree --reverse sqlalchemy
# JSON 输出
uv tree --format json
管理 Python 版本
uv python [OPTIONS] <COMMAND>
常用命令:
| 命令 | 描述 |
|---|---|
| list | 列出可用的 Python 安装版本 |
| install | 下载并安装指定版本 |
| find | 显示当前 Python 安装位置 |
| pin | 固定使用特定 Python 版本 |
| dir | 显示 uv Python 安装目录 |
| uninstall | 卸载 Python 版本 |
示例:
uv python list
uv python install python3.8
# 输出: Installed Python 3.8.20 in 3.98s
安装位置示例:
~/.local/share/uv/python/
├─ cpython-3.10.16-macos-aarch64-none
└─ cpython-3.8.20-macos-aarch64-none
下载速度对比
安装 torch:
# 传统 pip
time pip install torch
# 总耗时约 21s
# uv(指定项目的 Python)
time uv pip install torch --python .venv/bin/python
# 总耗时约 10s
说明:pip 串行安装,uv 多线程并行下载,并重用缓存,速度更快。
依赖冲突对比
requirements.txt
langchain==0.3.23
langchain-core==0.1.0
lxml==5.2.0
- pip:按顺序下载,遇到冲突即报错,且不一定一次暴露所有冲突。
- uv:先解析依赖,明确给出冲突原因,便于一次性修复。
示例(uv 输出):
× No solution found when resolving dependencies:
╰─▶ Because langchain==0.3.23 depends on langchain-core>=0.3.51,<1.0.0 ...
💡 实际应用
团队项目最佳实践
# 统一初始化
uv init myproj && cd myproj
# 固定 Python 版本
echo "3.12" > .python-version
# 添加依赖
uv add fastapi uvicorn[standard]
# 锁定并同步
uv lock && uv sync --clean
# 运行开发服务器
uv run uvicorn app:app --reload
与现有项目集成
# 读取现有 requirements.txt
uv add --from-requirements requirements.txt
# 生成锁定文件并同步
uv lock && uv sync
⚠️ 注意事项
- uv 的某些功能需要网络访问,请配置合理的镜像源
- Windows 用户建议使用 PowerShell 执行安装脚本
- 与 Conda 共存时,建议在项目级使用 uv 管理避免干扰
- 对生产环境,务必使用 uv.lock 进行版本锁定与复现
🔗 相关内容
📚 扩展阅读
- 官方网站与安装脚本:https://astral.sh/uv
- 文档与命令参考:https://docs.astral.sh/uv/
- GitHub 仓库:https://github.com/astral-sh/uv
🏷️ 标签
uv 包管理 虚拟环境 依赖锁定 Python版本管理 项目初始化 发布
最后更新: 2024-01-15
作者: Python 技术文档工程师
版本: 1.0
讨论与反馈
欢迎在下方留言讨论,分享你的学习心得或提出问题。评论基于GitHub Issues,需要GitHub账号。