在 Python 开发的世界中,包管理工具是开发者日常工作中不可或缺的一部分。无论是构建 Web 应用、进行数据分析,还是开发大语言模型(LLM)相关项目,一个高效、可靠的包管理工具都能显著提升开发体验。然而,传统的工具如
pip
和virtualenv
在面对复杂项目时,往往暴露出一些短板:安装速度慢、依赖解析效率低、虚拟环境管理繁琐,这些问题让开发者感到头疼。
什么是 uv
对于每一位 Python 开发者来说,日常工作都离不开 pip 和 venv。它们就像空气一样,我们依赖它,但有时也会因其缓慢的依赖解析和繁琐的环境管理而感到窒息。特别是对于大语言模型(LLM)和人工智能领域的开发者来说,项目依赖庞大而复杂,环境配置往往是"万里长征第一步"。但现在,这一切可能将迎来终局。
你是否听说过 Ruff?那个用 Rust 编写,比 Flake8、isort 快上百倍的 Python Linter。如今,它的创造者 Astral 公司,又为我们带来了另一个革命性工具------uv。
2024 年,一个由 Rust 语言驱动的新工具 uv 横空出世,迅速席卷 Python 社区。它不仅将依赖安装速度提升到令人惊叹的秒级,还整合了虚拟环境管理、项目构建、脚本运行和 Python 版本管理等功能,成为 Python 开发者的高效助手。uv 的跨平台支持和极致性能使其成为开发大语言模型、机器学习项目或企业级应用的理想选择。

uv 的核心优势
-
闪电般的速度
uv 的依赖解析和安装速度比
pip
快 10-100 倍。对于需要安装大型库(如torch
、transformers
或tensorflow
)的大语言模型开发者来说,这一优势尤为显著。例如,安装transformers
可能从几分钟缩短到几秒钟。 -
高效的存储管理
uv 使用全局缓存机制,避免重复下载相同的依赖包,有效节省磁盘空间。这对于需要频繁切换项目的开发者来说尤为实用。
-
跨平台兼容性
uv 在 Linux、Windows 和 macOS 上表现一致,无论您使用什么操作系统,都能享受相同的流畅体验。
-
一站式功能
uv 集成了包管理、虚拟环境创建、Python 版本管理、项目初始化和脚本运行等功能,无需安装多个工具即可完成所有操作。
-
现代化特性
支持内联依赖管理(PEP 723)、Git 依赖、URL 依赖以及按日期锁定依赖,这些特性让 uv 在复杂项目中游刃有余。

对于大语言模型开发者来说,uv 的高效性和环境可重现性尤为重要。它能确保模型训练环境的快速搭建和一致性,避免因依赖版本问题导致的实验失败或结果不可复现。
uv 的安装与基本使用
安装 uv
安装 uv 非常简单,以下是针对不同操作系统的命令:
- macOS 和 Linux:
bash
curl -LsSf https://astral.sh/uv/install.sh | sh
- Windows(使用 PowerShell):
powershell
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
安装完成后,检查版本以确认安装成功:
bash
uv --version
如果显示类似 uv 0.x.x
的版本号,说明 uv 已就绪。
创建和管理虚拟环境
uv 将虚拟环境管理简化到了极致。创建一个虚拟环境只需:
bash
uv venv
这会在当前目录下生成一个 .venv
文件夹。激活虚拟环境的方式根据操作系统不同而异:
- macOS/Linux:
bash
source .venv/bin/activate
- Windows:
cmd
.venv\Scripts\activate
相比 virtualenv
,uv 创建虚拟环境的速度更快,且能自动检测和使用指定版本的 Python,确保项目环境的一致性。
安装依赖
uv 支持多种安装方式,以下是常见场景的示例:
- 安装单个包:
bash
uv pip install flask
- 从 requirements.txt 安装:
bash
uv pip install -r requirements.txt
- 安装可编辑模式(用于本地开发):
bash
uv pip install -e .
以安装 transformers
为例,使用 pip
可能需要 2-3 分钟,而 uv 通常只需 5-10 秒。这种速度差异在大规模项目中尤为明显。
项目管理实战
让我们通过一个完整的 Flask 项目,展示 uv 的项目管理能力。
初始化项目
使用以下命令初始化一个 Flask 项目:
bash
uv init my-flask-app
cd my-flask-app
这会生成以下文件结构:
perl
my-flask-app/
├── pyproject.toml # 项目配置文件
├── app.py # 主应用文件
└── README.md # 项目说明
pyproject.toml
是项目的核心配置文件,uv 会自动管理其中的依赖和元数据。
添加依赖
添加 Flask 依赖:
bash
uv add flask
uv 会更新 pyproject.toml
文件并在虚拟环境中安装 Flask。更新后的 pyproject.toml
可能如下:
toml
[project]
name = "my-flask-app"
version = "0.1.0"
dependencies = [
"flask>=2.3.2",
]
编写 Flask 应用
编辑 app.py
,添加一个简单的 Web 服务:
python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "欢迎体验 uv,Python 开发新利器!"
@app.route('/about')
def about():
return "这是一个使用 uv 管理的 Flask 项目示例。"
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
运行项目
使用 uv run
运行应用:
bash
uv run app.py
uv 会自动激活虚拟环境并启动 Flask 服务。打开浏览器,访问 http://127.0.0.1:5000/
或 http://127.0.0.1:5000/about
,即可看到页面内容。整个过程无需手动管理环境,极大简化了开发流程。
Python 版本管理
uv 内置了对 Python 版本的管理功能,无需额外安装 pyenv
或其他工具。
安装特定 Python 版本
安装 Python 3.12:
bash
uv python install 3.12
uv 会自动下载并安装指定版本的 Python,并将其添加到全局可用版本列表中。
指定项目使用的 Python 版本
为项目固定 Python 3.12:
bash
uv python pin 3.12
这会在项目目录下生成 .python-version
文件,内容为:
3.12
此后,uv 在该项目中会始终使用 Python 3.12,确保团队协作时版本一致。
查看可用版本
列出所有已安装的 Python 版本:
bash
uv python list
这对于管理多个项目或调试版本相关问题非常有用。
脚本与依赖管理
uv 的高级功能使其在数据科学和大语言模型开发中尤为出色。以下是几个实用特性的详细介绍。
内联依赖管理(PEP 723)
uv 支持在脚本中直接声明依赖(PEP 723),无需额外的配置文件。这对于快速实验或分享脚本尤为方便。
创建一个脚本 analyze.py
:
python
# /// script
# dependencies = ["pandas==1.5.3", "seaborn==0.12.2"]
# ///
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 生成示例数据
df = pd.DataFrame({
"x": [1, 2, 3, 4, 5],
"y": [2.1, 4.5, 6.8, 8.2, 10.0]
})
# 绘制散点图
sns.scatterplot(data=df, x="x", y="y")
plt.title("使用 uv 运行的简单数据可视化")
plt.show()
运行脚本:
bash
uv run analyze.py
uv 会自动安装 pandas
和 seaborn
,并运行脚本生成散点图。这种自包含的方式非常适合数据科学家或模型开发者分享代码。
按日期锁定依赖
uv 支持按日期锁定依赖版本,确保环境可重现。例如,想使用 2024 年 12 月 31 日之前的依赖版本:
创建一个脚本 reproducible.py
:
python
# /// script
# dependencies = ["pandas"]
# [tool.uv]
# exclude-newer = "2024-12-31T00:00:00Z"
# ///
import pandas as pd
print(f"当前 pandas 版本: {pd.__version__}")
运行:
bash
uv run reproducible.py
uv 将安装 2024 年 12 月 31 日之前最新的 pandas
版本。这种功能在大语言模型复现历史实验时非常有用。
锁定脚本依赖
为脚本生成锁定文件,确保依赖版本完全一致:
bash
uv lock --script analyze.py
这会生成 analyze.py.lock
文件,记录精确的依赖版本。分发脚本时,只需附带锁定文件即可保证环境一致。
uv 与 PyCharm 集成
对于使用 PyCharm 的开发者,uv 可以无缝集成,提升开发效率。
配置 uv 环境
- 打开 PyCharm,进入
File > Settings > Project > Python Interpreter
。 - 点击"添加解释器",选择"uv"作为虚拟环境工具。
- 指定 Python 版本(如 3.12),PyCharm 会调用 uv 创建虚拟环境。
- 在"Terminal"中,运行
uv pip install flask
添加依赖,PyCharm 会自动识别。
管理依赖
在 PyCharm 的"Python Packages"面板中搜索并安装包(如 flask
),uv 会同步更新 pyproject.toml
和虚拟环境。

运行与调试
在 PyCharm 中直接点击"Run"按钮,uv 会自动激活虚拟环境并运行 app.py
,支持断点调试和实时日志查看。
大语言模型开发环境搭建示例
假设我们要搭建一个基于 transformers
的大语言模型开发环境,以下是完整步骤:
- 初始化项目:
bash
uv init llm-project
cd llm-project
- 添加依赖:
bash
uv add transformers torch numpy
- 编写测试脚本
test_model.py
:
python
# /// script
# dependencies = ["transformers", "torch", "numpy"]
# ///
import torch
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertModel.from_pretrained("bert-base-uncased")
text = "使用 uv 加速大语言模型开发"
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)
print(outputs.last_hidden_state.shape)
- 运行脚本:
bash
uv run test_model.py
uv 会快速安装依赖并运行脚本,输出张量形状(如 [1, 8, 768]
)。整个环境搭建过程不到 10 秒,相比传统工具节省了大量时间。
uv 的局限性
尽管 uv 功能强大,但作为新兴工具,它也有一些需要注意的地方:
-
与 pip 的兼容性
uv 支持大部分
pip
功能,但某些高级选项(如自定义索引源的复杂配置)尚未完全实现。未来版本可能会逐步完善。 -
平台特定性
uv 生成的锁定文件与平台绑定,跨平台移植时可能需要重新生成依赖。建议在目标平台上运行
uv lock
。 -
学习曲线
对于习惯
pip
和poetry
的用户,uv 的命令和 workflow 可能需要短暂适应,但其直观设计让上手过程并不复杂。
结语
对于 Python 开发者,尤其是从事大语言模型、数据科学或 Web 开发的朋友们,uv 是一个不可错过的工具。它不仅大幅提升了依赖管理和环境配置的效率,还通过内联依赖、按日期锁定和锁定文件等功能,确保了项目的高可重现性和团队协作的顺畅性。
现在就试试 uv 吧!用以下命令开启高效开发之旅:
bash
curl -LsSf https://astral.sh/uv/install.sh | sh