P 1、uv的催生
在 uv 出现之前,Python 的包管理和项目环境管理主要由以下几套工具组合承担:
- 包安装工具:pip,这是 Python 官方的包安装器,是事实上的标准。
- 虚拟环境管理工具:venv(Python 内置)或 virtualenv,用于创建独立的 Python 环境,隔离项目依赖。
- 高级综合工具:Poetry 或 Pipenv,它们试图将包管理和虚拟环境管理统一起来,并提供更好的依赖解析和锁定功能。当然,有小伙伴会说anaconda也是一个综合的高效工具,但它太大、太繁杂了,空间占用大,而且有点慢。
然而,这些工具在实践中存在一些痛点:
- 速度慢:尤其是 pip 在安装大型包或处理复杂依赖关系时,解析和编译耗时较长。
- 工作流繁琐:使用 pip 和 venv 需要多个步骤(创建虚拟环境、激活环境、安装包),不够一体化。
- 跨平台一致性:虽然 Poetry 等工具改善了体验,但在依赖解析速度和某些边缘案例的处理上仍有提升空间,尤其是在 Windows 平台上。
uv 正是在这样的背景下应运而生。 它由 Astral 公司开发(该公司同时也是高性能的 Python 代码格式化工具 Ruff 的创造者),其核心理念是极致的速度和现代化的用户体验。uv 使用 Rust 编写,旨在成为一个超快的、集包安装、虚拟环境管理、项目初始化于一体的 Python 工具,以替代pip 、pip-tools 、virtualenv 等多个工具。
P 2、uv是什么?
uv 是一个用 Rust 编写的、极其快速的 Python 包安装器和解析器。
但它远不止于此。你可以将它理解为一个一体化的 Python 项目工作流工具。它的目标是为 Python 开发者提供类似 Rust 的 Cargo 或 JavaScript 的 pnpm 那样流畅、高效的体验。
它的安装,仅需一条命令:
pip install uv # 就像python中的普通包一样安装
P 3、核心功能与作用
uv 的核心功能可以概括为以下几个方面:
1. 超快的包安装与管理(替代 pip )
这是 uv 最引人注目的功能。得益于 Rust 的高性能和先进的异步 I/O 处理,uv 在依赖解析和包下载安装方面比传统的 pip 快几个数量级(官方宣称可达 10-100 倍)。
- 作用:快速安装来自 PyPI 或其他索引的 Python 包。
- 优势:大幅缩短项目依赖安装时间,特别是在 CI/CD 流水线中效果显著。
2. 虚拟环境管理(替代 venv/virtualenv )
uv 内置了虚拟环境管理功能,无需额外工具。
- 作用:创建、删除和管理独立的 Python 虚拟环境。
- 优势:命令简洁,与包管理无缝集成,无需手动“激活”环境(虽然也支持)即可在指定环境中运行命令。
3. 依赖锁定与项目管理(类似 Poetry/Pipenv)
uv 支持读取 pyproject.toml 文件,并能生成一个精确的依赖锁定文件( uv.lock )。
- 作用:确保在不同机器和不同时间安装的依赖版本完全一致,实现可复现的构建。
- 优势:锁定文件生成速度极快,保证了团队协作和部署的一致性。
4. 项目初始化
uv 可以快速搭建一个新的 Python 项目骨架。
- 作用:一键生成包含 pyproject.toml、虚拟环境等标准结构的项目目录。
- 优势:标准化项目结构,提升开发效率。
5. 跨平台与 Python 版本管理
uv 能够自动下载并管理不同的 Python 解释器版本。
- 作用:轻松为项目切换和使用指定的 Python 版本(如 Python 3.10, 3.11, 3.12 等)。
- 优势:无需预先安装 pyenv 等版本管理工具,uv 自身就能处理,极大地简化了环境配置。
P 4、使用案例
以下是 uv 的一些典型使用场景和命令示例。
案例 1:快速初始化并管理一个项目
1.创建新项目:
# 创建一个名为 my-app 的新项目目录,并初始化 pyproject.tomluv init my-appcd my-app
2.添加依赖:
# 添加 fastapi 和 pytest 作为主要依赖和开发依赖uv add fastapiuv add --dev pytest
这会将依赖写入 pyproject.toml 并立即安装,同时生成/更新 uv.lock 文件。
3.在项目虚拟环境中运行命令:
# 无需显式激活环境,直接运行脚本uv run python main.py# 运行测试uv run pytest
案例 2:替代 pip,极速安装依赖
假设你有一个已有的项目,想用 uv 来安装依赖。
1.安装 pyproject.toml中的所有依赖:2.直接安装单个包到当前环境的 Python(全局或已激活的虚拟环境):
# 类似于 `pip install requests`uv pip install requests
uv 将 pip 作为一个子命令保留,但其底层实现仍然是 uv 的高速引擎。
案例 3:使用指定版本的 Python
你想用一个非系统默认的 Python 版本来运行项目。
# 告诉 uv 使用 Python 3.12,如果本地没有,uv 会自动下载uv run --python 3.12 my_script.py# 或者为项目指定一个固定的 Python 版本uv pin python@3.11
案例 4:在 CI/CD 中发挥威力
在 GitHub Actions 等 CI 环境中,速度就是金钱。使用 uv 可以极大缩短构建时间。
# .github/workflows/test.yml 示例片段- name: Install UV uses: astral-sh/setup-uv@v2- name: Set up Python run: uv python install 3.11 # 快速安装指定版本的 Python- name: Install dependencies run: uv sync # 极速安装项目依赖- name: Run tests run: uv run pytest
P 5、小结
uv 不是一个渐进式的改进,而是对传统 Python 工具链的一次革命性重塑。它通过 Rust 带来的原生高性能,将包管理、虚拟环境管理、版本控制等核心工作流整合到一个单一、连贯的工具中,主打速度快和体验好。
虽然 uv 目前仍处于快速发展的阶段,但其背后有 Astral 团队(Ruff 的成功已验证其技术实力)的强力支持,已经展现出成为未来 Python 开发标准工具的巨大潜力。对于新开始的 Python 项目,尤其是对构建速度和开发体验有要求的项目,强烈建议尝试使用 uv。
一句话总结:uv 旨在成为所有 Python 开发者的默认起点,让依赖管理和项目设置变得快速、简单且一致。
-------------------------它是数字世界里的一把杀猪刀
却总能巧夺天工
它的世界是纯粹0、1组合
却总能创造无尽幻想
......
本公众号关注数据价值分析、编程学习,将不定期更新社会热点数据分析结果、编程技巧,分享数据分析工具、方法、学习等内容,欢迎有兴趣的小伙伴加入。