
UV(Ultrafast Virtualenv)是一个由 Astral 团队开发的新一代 Python 包管理工具,于 2023 年推出。它的设计目标是解决 Python 包管理中的速度和依赖解析问题,使 Python 开发更加流畅高效。UV 由 Rust 语言编写,这使它在性能上有显著优势。

工具 | 设计哲学 | 最适用场景 |
|---|---|---|
UV | 极速、安全的 Python 包管理 | Python Web 开发、一般 Python 项目 |
conda | 全语言包管理系统 | 数据科学、跨语言项目、需要系统级依赖的项目 |
pip | Python 官方包安装工具 | 简单 Python 项目、作为其他工具的后端 |
venv模块兼容,但速度更快在安装 pandas 包及其依赖时的性能对比(数据为示例):
工具 | 首次安装时间 | 重复安装时间(缓存后) |
|---|---|---|
UV | 8 秒 | 2 秒 |
conda | 45 秒 | 12 秒 |
pip | 25 秒 | 10 秒 |
首先需要安装 UV 工具:
# 使用pipx安装(推荐)
pipx install uv
# 或使用pip安装
pip install uv
# 或在conda环境中安装
conda install uv -c conda-forge创建新环境:
# 创建名为 "myproject" 的新虚拟环境
uv venv myproject
# 指定Python版本创建环境
uv venv myproject --python=3.10激活环境:
在 Unix/Linux/macOS:
source myproject/bin/activate在 Windows:
myproject\\Scripts\\activate退出环境:
deactivate# 安装单个包
uv pip install numpy
# 安装特定版本
uv pip install pandas==2.0.0
# 从requirements.txt安装
uv pip install -r requirements.txt
# 从pyproject.toml安装
uv pip install -e .# 将当前环境导出到requirements.txt
uv pip freeze > requirements.txt
# 创建锁文件
uv pip compile pyproject.toml -o requirements.lock# 并行安装依赖
uv pip install -r requirements.txt --parallel
# 使用缓存安装
uv pip install numpy --cache-dir ~/.uv/cacheUV 提供了一个类似于 pipx 的功能,可以在隔离的环境中安装 Python 工具,同时使它们的命令行接口全局可用。这个功能通过uv tool命令实现。
uv tool install vs 普通包安装:简明对比pip install black)就像是:把工具放在一个特定的工具箱里,只有打开那个工具箱时才能用这工具。
uv tool install black (类似于 pipx install black)就像是:给工具建了一个独立的小房间,但在房子的任何地方都能用到它。
假设你有两个项目,分别需要不同版本的依赖库:
普通安装:
# 在项目A环境中
pip install black
# 在项目B环境中也需要单独安装
pip install black使用 uv tool 安装:
# 只需安装一次
uv tool install black
# 在任何项目中都可以使用black命令,不需要激活环境简而言之,uv tool install让工具可以全局使用,且不会与你的项目环境产生冲突。适用于那些你想在所有项目中使用的命令行工具。
基本用法:
# 安装一个Python工具
uv tool install black
# 指定版本安装
uv tool install flake8==6.0.0
# 安装最新版本
uv tool install mypy@latest
# 使用特定Python版本安装
uv tool install --python python3.11 pytest
# 强制重新安装
uv tool install --force django-admin高级选项:
# 安装带有额外依赖的工具
uv tool install "jupyter[notebook]"
# 从特定源安装
uv tool install --index-url <https://test.pypi.org/simple/> experimental-tool
# 安装开发版本
uv tool install git+https://github.com/user/project.git
# 列出已安装的工具
uv tool list
# 升级已安装的工具
uv tool upgrade aider-chat
# 卸载工具
uv tool uninstall blackuv tool命令的优势:
与 Poetry 项目集成:
# 从Poetry项目安装依赖
uv pip install -e .
# 将Poetry依赖导出并安装
poetry export -f requirements.txt | uv pip install -r -与 PDM项目集成:
# 使用PDM生成的requirements.txt
uv pip install -r pdm.lock假设我们要创建一个 Web 开发项目,包含以下步骤:
# 创建项目目录
mkdir webproject && cd webproject
# 创建虚拟环境
uv venv .venv
source .venv/bin/activate # 或在Windows上使用 .venv\\Scripts\\activate
# 创建基本项目结构
mkdir -p src/webproject tests
touch pyproject.tomlpyproject.toml:
[project]
name = "webproject"
version = "0.1.0"
description = "A web project example"
dependencies = [
"flask>=2.0.0",
"sqlalchemy>=2.0.0",
"pydantic>=2.0.0",
]# 安装项目依赖
uv pip install -e .
# 安装开发依赖
uv pip install pytest black mypy# 生成锁文件确保环境可重现
uv pip compile pyproject.toml -o requirements.lock# 使用uv tool安装常用开发工具
uv tool install black
uv tool install --python python3.10 aider-chat@latest# 添加更多依赖时
# 1. 更新pyproject.toml
# 2. 运行:
uv pip install -e .
# 3. 更新锁文件:
uv pip compile pyproject.toml -o requirements.lock在某些情况下,UV 和 conda 可以协同工作,发挥各自优势:
# 创建基础conda环境,只包含Python和系统依赖
conda create -n datascience python=3.10 numpy pandas -c conda-forge
# 激活环境
conda activate datascience
# 使用UV安装其余Python包
uv pip install scikit-learn matplotlib seaborn jupyterlab对于已有的 conda 项目,可以逐步引入 UV:
# 从conda环境导出Python包依赖
conda activate myenv
pip freeze > requirements.txt
# 使用UV安装新的Python包依赖
uv pip install -r requirements.txt
uv pip install new-package# 替代conda安装独立工具
uv tool install --force --python python3.10 jupyter
uv tool install --force --python python3.11 black mypy ruff问题: UV 是否与 pip 完全兼容? 解决方案: UV 兼容 pip 的大部分命令,但某些高级或不常用的选项可能不支持。使用uv pip --help查看支持的选项。
问题: UV 创建的环境能否被其他工具识别? 解决方案: 是的,UV 创建的是标准 Python 虚拟环境,可以被任何支持 venv 的工具识别。
问题: 依赖解析失败时如何处理?
解决方案:
# 查看详细的依赖冲突信息
uv pip install package-name --verbose
# 尝试放宽版本限制
uv pip install "package-name>=1.0.0" --no-deps问题: UV 缓存占用太多空间
解决方案:
# 清理UV缓存
uv cache clean
# 限制缓存大小
uv cache limit 2GB问题: 使用 uv tool 安装的工具无法运行
解决方案:
# 检查工具是否成功安装
uv tool list
# 检查PATH环境变量是否包含UV的bin目录
echo $PATH
# 重新安装工具
uv tool install --force tool-name问题: 如何管理 uv tool 安装的工具版本?
解决方案:
# 查看当前安装的版本
uv tool list
# 安装特定版本
uv tool install tool-name==1.2.3
# 升级到最新版本
uv tool upgrade tool-name