python uv 更好用。uv 是 astral 团队开发的 rust 重写工具,原生支持 pep 621 项目配置,无需额外的 pyproject.toml 解析逻辑,且执行速度极快。它直接提供虚拟环境管理、依赖安装和包发布功能,彻底取代了 pip、pip-tools、virtualenv 甚至 poetry 的核心职责。

为什么 uv 比 Poetry 更快更简单
因为 uv 将解析、锁定和安装合并为原子操作,而 Poetry 需要多次调用外部进程。Poetry 的锁文件生成(poetry lock)通常耗时数秒到数十秒,而 uv sync 在相同规模下通常在毫秒级完成。此外,uv 不需要像 Poetry 那样维护复杂的插件系统或特定的 TOML 结构,它直接使用标准的 pyproject.toml 字段。

import subprocess
import time
def benchmark_tool(tool_name, args):
start = time.time()
# 模拟运行命令,实际测试中应使用真实项目
# subprocess.run([tool_name] + args, check=True)
end = time.time()
return end - start
# 对比示例:安装一个包含 50 个依赖的项目
print(f"uv sync: {benchmark_tool('uv', ['sync']):.3f}s")
print(f"poetry install: {benchmark_tool('poetry', ['install']):.3f}s")
预期结果:uv sync 耗时显著低于 poetry install。例如,对于中型项目,uv 可能在 0.5s 内完成,而 Poetry 可能需要 5-10s。这得益于 uv 的二进制分发和并行下载机制。
如何从 Poetry 迁移到 uv
迁移过程极其平滑,因为 uv 完全兼容 Poetry 的 pyproject.toml 格式。你只需保留原有的 [tool.poetry] 部分,或者将其转换为标准的 [project] 部分,然后使用 uv 命令替代原来的 poetry 命令。uv 能够自动识别并处理 Poetry 的依赖组(dependency groups),无需手动转换。

# 原有 Poetry 项目结构 # pyproject.toml 中包含 [tool.poetry] # 迁移步骤 1: 安装 uv (如果尚未安装) # curl -LsSf https://astral.sh/uv/install.sh | sh # 迁移步骤 2: 使用 uv 同步依赖,无需修改 pyproject.toml uv sync # 迁移步骤 3: 验证环境 uv run python -c "import sys; print(sys.executable)" # 迁移步骤 4: 可选 - 转换为标准格式 (非必须,但推荐长期维护) uv convert
预期结果:执行 uv sync 后,venv 被创建,所有依赖被安装,且行为与 poetry install 一致。uv run 可以无缝替换 poetry run。convert 命令会将 [tool.poetry] 转换为标准的 [project.dependencies] 和 [project.optional-dependencies],提高跨工具兼容性。
uv 如何处理特定版本的 Python 解释器
uv 内置了 Python 版本管理功能,可以直接下载和管理不同版本的 Python 解释器,无需依赖 pyenv 或系统包管理器。当你指定一个不存在的 Python 版本时,uv 会自动下载并缓存该版本,然后在后续操作中复用。这对于 CI/CD 环境和多版本测试场景非常有用。
# 指定 Python 3.12 进行开发 uv venv --python 3.12 # 激活环境并运行脚本 uv run python script.py # 检查当前使用的 Python 版本 uv python list # 清理不再需要的 Python 版本缓存 uv python uninstall 3.11
预期结果:uv venv --python 3.12 会创建一个指向 Python 3.12 的虚拟环境。如果本地没有 3.12,uv 会先下载它。uv python list 显示已安装的版本列表。这种集成化管理减少了环境配置的复杂性,避免了“在我的机器上能跑”的问题。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











