Python 统一大业:uv 如何整合 Pip、Pyenv 和 Venv?
Python的包管理,一直是开发者们绕不开的“甜蜜烦恼”。从经典的pip到virtualenv,再到后来涌现的poetry、conda、pdm,工具层出不穷,但总感觉差那么点意思——要么速度慢得让人心焦,要么依赖冲突搞得人头昏脑胀。 最近,Python社区里杀出了一匹黑马,名叫uv。它出自打造了风靡
Python的包管理,一直是开发者们绕不开的“甜蜜烦恼”。从经典的pip到virtualenv,再到后来涌现的poetry、conda、pdm,工具层出不穷,但总感觉差那么点意思——要么速度慢得让人心焦,要么依赖冲突搞得人头昏脑胀。

最近,Python社区里杀出了一匹黑马,名叫uv。它出自打造了风靡一时的极速代码检查工具Ruff的团队之手,同样用Rust语言编写。这个工具的特点非常鲜明,核心就一个字:快。但更关键的是,它的野心不小,目标是实现“大一统”——包管理、虚拟环境、乃至Python版本管理,它都想一手包办。
今天,我们就来深入聊聊这个被不少人视为“Python基础设施未来”的新工具。
为什么要用 uv?
简单来说,uv的愿景是整合那些原本需要多个工具才能完成的工作:
- 速度极快:得益于Rust的高性能,其包安装速度号称比传统的
pip和pip-tools快10到100倍,这并非夸张。 - All-in-One:这意味着,你或许不再需要
pyenv来安装Python,不需要venv来创建隔离环境,也不需要单独的pip来安装包。一个uv,就能覆盖这些核心工作流。
安装 uv:开启极速之旅
安装过程非常简单,甚至不需要你事先安装好Python。
macOS
推荐使用Homebrew进行安装:
brew install uv
或者,也可以使用官方提供的安装脚本:
curl -LsSf | sh
Linux
官方同样推荐使用curl命令安装:
curl -LsSf | sh
Windows
可以使用Winget包管理器安装:
winget install uv
或者通过PowerShell执行安装脚本:
powershell -c "irm | iex"
如果你已经有了 pip
当然,也可以像安装普通Python包一样通过pip安装(虽然不推荐作为首选,但确实很方便):
pip install uv
注:安装完成后,记得重启终端,或根据提示配置好环境变量。
验证
安装完成后,可以通过以下命令验证是否成功:
uv --version
管理 Python 版本:忘掉 pyenv 吧
过去,要安装和管理多个Python版本,通常得借助pyenv或者手动下载安装包。现在,uv可以直接接管这项任务。
查看可用的 Python 版本:
uv python list
安装特定的 Python 版本:
# 安装 Python 3.12
uv python install 3.12# 安装 Python 3.9
uv python install 3.9
uv会自动下载并管理这些版本,你甚至无需手动配置系统路径。当运行项目时,它会自动查找并使用合适的Python版本。
项目初始化与虚拟环境
以往我们习惯先执行python -m venv .venv来创建虚拟环境。uv则将这套流程变得更加符合现代工程习惯。
初始化一个新项目
# 创建一个名为 my-project 的新项目
uv init my-project# 进入目录
cd my-project
执行uv init后,它会帮你生成pyproject.toml(现代Python项目的标准配置文件)和一个.python-version文件。
自动创建虚拟环境
当你在项目目录中添加依赖或运行代码时,uv会自动为你创建并管理虚拟环境,无需手动干预。
当然,如果你仍想手动创建一个传统的虚拟环境,也可以:
# 在当前目录创建 .venv
uv venv# 激活环境(macOS/Linux)
source .venv/bin/activate# 激活环境(Windows)
.venvScriptsactivate
之后,可以为项目固定Python版本:
# 为当前项目固定 Python 3.11
uv python pin 3.11
包管理与依赖添加
这是开发者最常用的功能。uv的命令设计得非常直观。
安装包:
# 安装最新版本
uv pip install requests# 安装特定版本
uv pip install requests==2.31.0# 从 requirements.txt 安装
uv pip install -r requirements.txt
安装开发依赖:
uv pip install --dev pytest
执行安装命令后,uv会完成三件事:
- 下载包(如果本地缓存中没有)。
- 安装到项目的虚拟环境中。
- 自动更新
pyproject.toml和uv.lock文件(后者用于锁定依赖版本,确保团队协作环境的一致性)。
升级包:
uv pip upgrade requests
卸载包:
uv pip uninstall requests
同步依赖 (Sync)
当你拉取同事的代码,或者切换分支后,需要将本地环境同步到最新状态时:
# 根据 lock 文件同步环境
uv sync
运行代码
以往我们需要先source .venv/bin/activate激活环境,再执行python app.py。使用uv,可以直接一步到位:
# 在项目的虚拟环境中运行 app.py
uv run app.py# 运行安装在环境中的工具,比如 pytest
uv run pytest
uv run命令会自动检测并使用当前项目的虚拟环境,省去了手动激活的步骤。
旧项目迁移:如何从 pip/poetry/pipenv 迁移到 uv?
如果你手头有现有的老项目,想体验uv的速度,迁移过程其实相当平滑。
场景一:只有 requirements.txt
这是最常见的情况。
# 1. 初始化 uv 项目
uv init# 2. 直接安装 requirements.txt 里的依赖
uv pip install -r requirements.txt
场景二:直接替代 pip 使用
如果不想改变&现有项目结构,只想加速pip install的过程,可以把uv当作pip的替代品来用:
# 创建环境
uv venv# 激活环境 (Windows: .venvScriptsactivate)
source .venv/bin/activate # 用 uv 的 pip 接口安装
uv pip install requests
场景三:从 Poetry 迁移
uv原生支持解析pyproject.toml文件。虽然它有自己的依赖管理格式,但对社区标准兼容性很好。你可以直接在原有的Poetry项目目录下尝试执行uv sync,或者干脆删除poetry.lock,使用uv add命令重新构建依赖树。
场景四:从 Pipenv 迁移
如果你的项目使用Pipfile和Pipfile.lock,迁移到uv也很直接:
- 生成标准依赖文件:由于
uv目前主要基于pyproject.toml标准,可以先用pipenv导出依赖:
pipenv requirements > requirements.txt
- 让 uv 接管:
# 初始化 uv
uv init
# 将导出的依赖添加到 uv 记录中
cat requirements.txt | xargs uv add
- 清理旧文件:迁移完成后,就可以放心地删除
Pipfile和Pipfile.lock,转而使用uv.lock来管理依赖锁定了。
总结
uv不仅仅是一个更快的包安装器,它正在演变为一个完整的Python开发标准工作流工具。
- 对于新手:无需再纠结虚拟环境(venv)和系统Python的区别,
uv init之后就能直接开始编码,降低了入门门槛。 - 对于经验丰富的开发者:极速的依赖安装体验和符合直觉的项目工作区管理,能显著提升日常开发效率。
俗话说,天下武功,唯快不破。uv在速度上的优势是实实在在的。非常建议你在自己的开发环境中尝试一下,体验过后,很可能就再也回不去了。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















