📦 Python 包管理器 UV 介绍
✅ 1. 背景与简介
在现代 Python 项目中,包管理与构建工具种类繁多,如 pip
, poetry
, pipenv
,但这些工具存在:
- 安装慢 🚶♂️
- 解析依赖慢 🐢
- 难以部署到 CI/CD 中 ⛓️
为此,Astral 公司推出了新一代超快包管理器 —— **UV**。
🌟 UV 是什么?
UV 是一个使用 Rust 编写的 Python 包管理器,兼容 pip
/virtualenv
,但性能极高。它支持解析、下载、构建和安装 Python 包,是 pip
的 drop-in 替代。
- 构建于 Rust:极致性能
- 支持
pyproject.toml
- 完整的虚拟环境管理器
- 安装速度是 pip 的 8 倍+
🧪 2. 安装与基本用法
✅ 安装 UV
1 2
| curl -Ls https://astral.sh/uv/install.sh | bash
|
或使用 Homebrew:
1
| brew install astral-sh/uv/uv
|
安装完成后,检查版本:
🔁 如何使用 pip 安装 UV?
虽然 UV 推荐使用官方提供的安装脚本或 Homebrew(在 macOS 上),但也可以通过 pip 安装(适合有网络限制的企业场景或需要私有源的 CI/CD 环境)。
✅ 方法一:使用 pip 安装 uv(通过 PyPI)
注意:UV 是用 Rust 编写的,通过 PyPI 安装实际上是安装其 Python 接口(不是官方推荐方式,但某些企业项目允许)
⚠️ 安装后并非完整 uv
功能,仅用于尝鲜或集成某些 Python 工具。
✅ 初始化项目(推荐用 pyproject.toml
)
将生成项目结构:
1 2 3 4 5
| . ├── pyproject.toml └── src/ └── your_module/ └── __init__.py
|
📄 3. 了解 pyproject.toml
❓ pyproject.toml
是什么?
PEP 518/621 定义了 pyproject.toml
为 Python 项目元数据的标准格式。
它可取代:
setup.py
requirements.txt
setup.cfg
用于声明:
- 项目信息(名称、版本、作者)
- 构建系统(如 setuptools/poetry)
- 依赖项
- 工具配置(如 black, mypy, flake8)
目标:统一并标准化 Python 项目的构建、打包与依赖管理。
它用来替代传统的:
老工具 |
对应功能 |
setup.py |
包描述 & 安装入口 |
setup.cfg |
配置参数 |
requirements.txt |
依赖包管理 |
MANIFEST.in |
文件清单 |
✅ 示例:典型的 pyproject.toml
1 2 3 4 5 6 7 8 9 10 11 12 13
| [project] name = "my-enterprise-tool" version = "0.1.0" description = "A fast backend tool for enterprise batch tasks" authors = [{ name="Your Name", email="[email protected]" }] dependencies = [ "requests>=2.26.0", "pydantic>=2.0", "redis", ]
[tool.uv] virtualenvs.in-project = true
|
✅ 为什么企业推荐使用 pyproject.toml
?
优势点 |
说明 |
🧩统一依赖管理 |
不再需要分散的setup.py 、requirements.txt |
📦支持多构建工具(如poetry ,uv ,setuptools ) |
可兼容多种构建方式 |
🚀便于自动化与 CI/CD 管理 |
易于脚本解析和工具链接入 |
🔍结构清晰 |
TOML 格式适合结构化编辑和机器解析 |
🎯可声明可选依赖、开发依赖等环境区分 |
方便 dev/prod 环境切换 |
❌ pyproject.toml
的局限与注意事项
局限/问题 |
企业建议或解决方案 |
❗ 不支持 shell 脚本逻辑 |
替代setup.py 后,逻辑需写入构建钩子插件 |
📦 安装过程中不解析注释 |
需通过文档记录复杂依赖说明 |
🚧 某些旧项目工具不兼容 |
建议升级构建工具或混合使用requirements.txt |
💼 CI/CD 中初次上手成本略高 |
建议团队编写统一模板与校验工具 |
⚙️ 4. 安装依赖与开发工具集成
✅ 安装依赖
1
| uv pip install -r requirements.txt
|
或使用 pyproject.toml
:
✅ 添加开发依赖
1
| uv pip install --dev black mypy pytest
|
这些会被记录在 [tool.uv.dev-dependencies]
中。
🧑💻 5. 企业实战场景
✅ 示例 1:项目初始化 + 安装依赖
1 2
| uv init uv pip install fastapi uvicorn
|
✅ 示例 2:创建虚拟环境并激活
1 2
| uv venv source .venv/bin/activate
|
✅ 示例 3:自动格式化与类型检查
1 2 3
| uv pip install --dev black mypy black src/ mypy src/
|
🛠 6. 与其他工具对比(pip/poetry)
功能/工具 |
pip |
poetry |
UV |
安装速度 |
慢 |
中 |
🚀 快 |
支持 pyproject |
❌ |
✅ |
✅ |
虚拟环境管理 |
手动 |
自动 |
✅ 自动 |
构建打包 |
❌ |
✅ |
✅ |
多平台兼容性 |
✅ |
✅ |
✅ |
CI/CD 适配性 |
中 |
中 |
✅ 高 |
📘 7. 高级用法
🔐 私有源配置
支持使用私有 PyPI:
1
| uv pip install --index-url https://your.private.repo/simple internal-lib
|
或在 .uv/config.toml
添加:
1 2
| [tool.uv] index-url = "https://your.private.repo/simple"
|
📦 构建 wheel 包
生成:
1 2
| dist/ ├── my_enterprise_tool-0.1.0-py3-none-any.whl
|
🧪 8. 示例代码:一个完整项目
1 2 3 4 5 6 7 8 9
| import requests
def fetch_data(): resp = requests.get("https://httpbin.org/json") return resp.json()
if __name__ == "__main__": print(fetch_data())
|
📦 9. 总结
特性 |
UV 价值 |
极致性能 |
✅ 安装快、解析快 |
企业适配性强 |
✅ CI/CD 支持好 |
标准化配置 |
✅ 使用 pyproject.toml |
替代 pip/poetry |
✅ 一站式解决方案 |
🔚 附录:命令速查表
1 2 3 4 5 6
| uv init uv pip install pkg uv pip install --dev uv venv uv build uv run main.py
|