UV 使用指南:Python 包管理工具
·
在 Python 开发中,包管理一直是一个关键但有时令人头疼的问题。从 pip 到 pipenv,再到 poetry,我们一直在寻找更好的解决方案。现在,一个全新的工具出现了——UV,由 Astral 团队开发(也是 Ruff 的创建者),它正在改变我们对 Python 包管理的认知。
什么是 UV?
UV 是一个用 Rust 编写的极速 Python 包解析器和安装器,可以作为 pip 和 pip-tools 工作流的直接替代品。它的速度令人惊叹——比传统的 pip 快 10-100 倍!
主要特性
- ⚡ 极速:比 pip 快 10-100 倍
- 🐍 Python 兼容:支持 Python 3.7+
- 🔧 简单易用:熟悉的命令行界面
- 🌐 生产就绪:适用于开发和生产环境
- 📦 多功能:包安装、虚拟环境管理、项目初始化
安装 UV
在 Linux 和 macOS 上
curl -LsSf https://astral.sh/uv/install.sh | sh
或者使用 pip:
pip install uv
在 Windows 上
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
使用包管理器
Homebrew (macOS/Linux):
brew install uv
Pipx:
pipx install uv
基本使用
1. 初始化新项目
# 创建新项目
uv init my-project
cd my-project
# 或者使用指定 Python 版本
uv init my-project --python 3.11
2. 安装包
# 安装单个包
uv add requests
# 安装多个包
uv add flask pandas numpy
# 安装开发依赖
uv add --dev pytest black flake8
# 从 requirements.txt 安装
uv pip install -r requirements.txt
3. 虚拟环境管理
UV 自动管理虚拟环境,但你也可以手动控制:
# 创建虚拟环境
uv venv
# 使用特定 Python 版本
uv venv --python 3.11
# 激活虚拟环境
source .venv/bin/activate # Linux/macOS
.venv\Scripts\activate # Windows
4. 依赖管理
# 生成 requirements.txt
uv pip freeze > requirements.txt
# 安装所有依赖
uv pip install -r requirements.txt
# 同步环境(精确匹配)
uv pip sync requirements.txt
高级功能
1. 快速项目初始化
# 一键创建完整项目结构
uv init my-app --package --src --git
这会创建:
pyproject.toml配置文件- 源代码目录结构
- Git 仓库和
.gitignore
2. 并行安装
UV 默认使用并行安装来最大化速度:
# 使用 8 个并行任务(默认)
uv add pandas
# 自定义并行任务数
UV_JOBS=4 uv add numpy scipy
3. 缓存优化
UV 具有智能缓存系统:
# 清理缓存
uv cache clean
# 查看缓存信息
uv cache info
4. 平台特定依赖
# 仅限 Windows 的依赖
uv add pywin32 --platform windows
# 仅限 Linux 的依赖
uv add linux-specific-pkg --platform linux
工作流示例
开发工作流
# 1. 创建新项目
uv init my-api-project
cd my-api-project
# 2. 添加生产依赖
uv add fastapi uvicorn
# 3. 添加开发依赖
uv add --dev pytest httpx black
# 4. 运行开发服务器
uv run uvicorn main:app --reload
CI/CD 工作流
# .github/workflows/test.yml
name: Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: astral-sh/setup-uv@v1
with:
python-version: "3.11"
- run: uv sync --dev
- run: uv run pytest
生产环境部署
FROM python:3.11-slim
WORKDIR /app
# 安装 uv
RUN pip install uv
# 复制依赖文件
COPY pyproject.toml .
# 安装依赖(不使用虚拟环境)
RUN uv pip install --system -r pyproject.toml
# 复制应用代码
COPY . .
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0"]
性能对比
让我们看看 UV 与其他工具的性能对比:
|
操作 |
pip |
Poetry |
UV |
速度提升 |
|
安装 requests |
2.1s |
3.4s |
0.3s |
7x |
|
安装 pandas + numpy |
28.4s |
31.2s |
4.1s |
7x |
|
创建虚拟环境 |
1.2s |
2.1s |
0.1s |
12x |
|
依赖解析 |
5.8s |
4.2s |
0.4s |
10x |
配置技巧
1. 全局配置
# 设置默认 Python 版本
uv config set default-python 3.11
# 启用彩色输出
uv config set color always
# 设置缓存目录
uv config set cache-dir /path/to/cache
2. 环境变量
# 控制并行任务数
export UV_JOBS=8
# 设置超时时间
export UV_TIMEOUT=30
# 启用详细日志
export UV_LOG_LEVEL=debug
3. Pyproject.toml 配置
[project]
name = "my-project"
version = "0.1.0"
dependencies = [
"requests>=2.25.0",
"flask>=2.0.0",
]
[project.optional-dependencies]
dev = [
"pytest>=6.0",
"black>=21.0",
]
[tool.uv]
index-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
trusted-host = "pypi.tuna.tsinghua.edu.cn"
常见问题解答
Q: UV 与 pip 兼容吗?
A: 是的!UV 完全兼容 pip 的工作流,可以直接使用 requirements.txt 文件。
Q: 可以在现有项目中使用 UV 吗?
A: 当然可以!只需在现有项目目录中运行 uv add 命令即可。
Q: UV 支持私有包索引吗?
A: 支持,配置方式与 pip 相同:
uv config set index-url https://your-private-index.com/simple
uv config set extra-index-url https://pypi.org/simple
Q: 如何从其他工具迁移?
A: 迁移非常简单:
- 从 pip:直接使用
uv pip install -r requirements.txt - 从 Poetry:使用
uv add添加pyproject.toml中的依赖 - 从 Pipenv:导出
requirements.txt然后使用 UV
总结
UV 代表了 Python 包管理的未来方向:
- 🚀 惊人的速度:节省宝贵的开发时间
- 💻 友好的用户体验:直观的命令行界面
- 🛠️ 强大的功能:满足各种使用场景
- 🔄 完美的兼容性:与现有生态无缝集成
无论你是 Python 新手还是经验丰富的开发者,UV 都值得一试。它的速度和易用性将彻底改变你的开发工作流。
立即尝试 UV,体验极速的 Python 包管理!
更多推荐
所有评论(0)