Files
Obsidian/博客/编程与工具/uv工具推荐博客.md
T

28 KiB
Raw Blame History

极速 Python 包管理神器:uv 体验报告

如果你还在用 pip 安装包、用 conda 创建环境、用 virtualenv 管理虚拟环境,那你一定要试试 uv。这篇文章,我会详细介绍这款让我"相见恨晚"的 Python 包管理工具。

前言

作为一名 Python 开发者,我每天都要和包管理打交道。从最初的 easy_install,到后来的 pip,再到 conda、virtualenv、poetry、pyenv... 市面上的工具我几乎都用过。

直到有一天,我遇到了 uv

说实话,第一次看到 uv 的介绍时,我是持怀疑态度的:"又一个 Python 包管理工具?能比 pip 好用多少?"

但当我真正用它跑了几条命令之后,我的心态发生了巨大转变:这玩意儿是真的香。

所以写了这篇博客,把 uv 推荐给更多 Python 开发者。如果你也在为 Python 环境管理烦恼,这篇文章或许能帮到你。


第一章:初识 uv —— 它到底是什么?

1.1 来自 Astral 的明星产品

uv 是由 Astral 公司开发的工具。Astral 这个名字你可能不熟悉,但他们的产品你一定听说过:

  • ruff —— Python 代码检查工具,速度比 flake8 快 10-100 倍
  • ruff formatter —— Python 代码格式化工具

没错,uv 和 ruff 是同一个公司的产品。这个公司专注于打造"极速"工具,而 uv 正是他们针对 Python 生态的包管理解决方案。

1.2 用 Rust 编写,为速度而生

uv 最大的特点是:

它是用 Rust 编写的,这让它在性能上远超用 Python 写的 pip、conda 等工具。具体有多快?官方给出的数据是:

操作 pip uv
安装 requests ~2.5 秒 ~0.2 秒
创建虚拟环境 ~8 秒 ~0.2 秒
解析依赖 数十秒 毫秒级

这些数据可能因系统环境而异,但总体来说,uv 的速度是 pip 的 10-100 倍

1.3 一个工具,替代六个

uv 的设计理念是"大一统"——用一个工具解决所有 Python 环境管理问题:

工具 uv 替代
pip uv pip install
pip-tools uv pip compile
pipx uv tool install
poetry uv init, uv add
pyenv uv python install
venv / virtualenv uv venv

没错,你不需要安装 pip、conda、poetry、pyenv、virtualenv、pipx 六个工具,只需要一个 uv。

1.4 为什么要换掉 pip

你可能会问:"pip 我用了这么多年好好的,为什么要换?"

坦白说,如果你的项目规模不大、依赖不多,pip 完全够用。但随着项目复杂度增加,你会遇到这些问题:

pip 太慢:安装一个 numpy 可能要等半分钟,遇到依赖复杂的大包(如 tensorflow、torch)更是要等几分钟。

环境切换麻烦:要在多个 Python 版本和虚拟环境之间切换,你需要 pyenv、virtualenv、conda 等工具来回切换。

依赖管理不完善pip freeze 生成的 requirements.txt 可能包含不必要的依赖,pip install -r requirements.txt 有时还会遇到版本冲突。

uv 正是为了解决这些问题而设计的。它不仅快,而且提供了统一的依赖管理方案。


第二章:安装 uv —— 5 分钟搞定

2.1 Windows 安装(推荐 PowerShell

在 Windows 上安装 uv 有多种方式,我推荐使用 PowerShell 安装脚本,这是最简单的方式:

# 使用 PowerShell 安装脚本(推荐)
irm https://astral.sh/uv/install.ps1 | iex

或者,如果你已经安装了 scoop,可以用这个方式:

# 使用 scoop 安装
scoop install uv

另外,Windows 用户也可以用 winget

# 使用 winget 安装
winget install --id=astral-sh.uv -e

2.2 macOS 安装

macOS 用户可以用 Homebrew

# 使用 Homebrew 安装
brew install uv

2.3 Linux 安装

Linux 用户可以用 curl

# 使用 curl 安装(适用于大多数 Linux 发行版)
curl -LsSf https://astral.sh/uv/install.sh | sh

或者通过包管理器:

# Debian/Ubuntu
apt install uv

# Fedora
dnf install uv

2.4 验证安装

安装完成后,打开一个新的终端窗口(记得重新打开,因为 PATH 可能需要刷新),输入:

uv --version
# 输出应该类似:
# uv 0.5.x

如果显示了版本号,说明安装成功。

2.5 遇到问题?

问题 1:无法运行脚本

如果遇到"禁止运行脚本"的错误,需要调整 PowerShell 的执行策略:

# 查看当前执行策略
Get-ExecutionPolicy

# 如果是 Restricted,修改为 RemoteSigned
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

# 然后重新运行安装命令
irm https://astral.sh/uv/install.ps1 | iex

问题 2:找不到 uv 命令

安装后需要刷新环境变量,或者手动将 uv 的路径添加到 PATH:

# 查看 uv 的安装路径
where.exe uv

# 如果找到了,手动添加到 PATH
$env:PATH += ";C:\Users\你的用户名\.local\bin"

第三章:虚拟环境管理 —— 轻量快速

3.1 创建虚拟环境

这是 uv 最基础的功能之一。创建虚拟环境只需要一条命令:

# 创建默认环境(.venv
uv venv

# 创建自定义名称的环境
uv venv myenv

# 指定 Python 版本
uv venv --python 3.11 myenv
uv venv --python 3.12 myenv

查看可用的 Python 版本:

# 列出所有可用版本(包括已安装和可下载)
uv python list

# 只显示已安装的版本
uv python list --only-installed

3.2 激活虚拟环境

创建环境后,需要激活才能使用:

# PowerShell
.venv\Scripts\Activate.ps1

# CMD
.venv\Scripts\activate.bat

# Bash (Git Bash / WSL / macOS / Linux)
source .venv/Scripts/activate

激活成功后,终端提示符会变化,显示当前环境的名称。

3.3 退出虚拟环境

# 通用方法
deactivate

# 或者直接关闭当前终端

3.4 删除虚拟环境

删除虚拟环境非常简单:

# Windows PowerShell
Remove-Item -Recurse -Force .venv

# 或者用 rd 命令
rd /s /q .venv

# Linux/macOS/Bash
rm -rf .venv

uv 创建的虚拟环境就是普通的 .venv 目录,不需要专门的删除命令。

3.5 与 conda 对比

我之前一直用 conda 管理环境,但 conda 有几个让人头疼的问题:

问题 1:体积太大

conda 本身加上 base 环境,少说也要 1-2GB。而 uv 创建的虚拟环境,只有 Python 解释器本身,几个 MB 而已。

问题 2:创建慢

conda create 创建环境可能要等几十秒,而 uv venv 只要不到 1 秒。

问题 3:频道混乱

conda 有 main、conda-forge、pytorch 等多个频道,有时候安装包会遇到找不到、版本冲突的问题。uv 直接用 PyPI,干净利落。

对比表

特性 uv conda
创建速度 <1 秒 10-30 秒
初始体积 ~5 MB ~500 MB
包来源 PyPI 多频道
环境切换
命令复杂度 简单 复杂

3.6 实际体验

让我用一个实际的例子展示 uv 的速度:

# 用 uv 创建环境
Measure-Command { uv venv --python 3.11 }
# 结果:大约 0.2 秒

# 对比:用 conda 创建环境
# Measure-Command { conda create -n test -y python=3.11 }
# 结果:大约 30 秒

这个差距是巨大的,尤其是在你需要频繁创建/删除环境的时候。


第四章:包管理 —— pip 的完美替代

4.1 安装包

这是 uv 最常用的功能。uv pip install 可以完全替代 pip install

# 安装单个包
uv pip install requests

# 安装多个包
uv pip install requests numpy pandas

# 指定版本
uv pip install requests==2.28.0
uv pip install "requests>=2.28,<3.0"

# 从 requirements.txt 安装
uv pip install -r requirements.txt

# 从 Git 安装
uv pip install git+https://github.com/user/repo.git

# 从本地路径安装
uv pip install ./mypackage

# 安装可编辑模式(开发模式)
uv pip install -e ./mypackage

4.2 卸载包

# 卸载单个包
uv pip uninstall requests

# 卸载多个包
uv pip uninstall requests numpy

# 从 requirements.txt 卸载
uv pip uninstall -r requirements.txt

4.3 查看已安装的包

# 以 requirements 格式输出
uv pip freeze

# 以列表格式输出(更易读)
uv pip list

4.4 同步依赖

这是 uv 的一个特色功能。当你有 requirements.txtpyproject.toml 时,可以用 sync 命令确保环境与文件一致:

# 同步到 requirements.txt
uv pip sync requirements.txt

# 同步到 pyproject.toml
uv sync

# 安装开发依赖
uv sync --group dev

4.5 性能对比实测

让我实际测试一下 uv 和 pip 的速度差距:

# 测试 1:安装 requests
# pip
Measure-Command { pip install requests }
# 耗时:约 3-5 秒

# uv
Measure-Command { uv pip install requests }
# 耗时:约 0.3-0.5 秒

# 测试 2:安装 numpy(更大的包)
# pip
Measure-Command { pip install numpy }
# 耗时:约 10-15 秒

# uv
Measure-Command { uv pip install numpy }
# 耗时:约 1-2 秒

# 测试 3:安装 pandas(依赖复杂)
# pip
Measure-Command { pip install pandas }
# 耗时:约 30-60 秒

# uv
Measure-Command { uv pip install pandas }
# 耗时:约 3-5 秒

可以看到,包越大、依赖越复杂,uv 的优势越明显。

4.6 依赖解析

uv 内置了强大的依赖解析器,能够:

  • 并行下载:同时下载多个包
  • 智能缓存:避免重复下载
  • 冲突检测:安装前检测版本冲突
# 查看包的信息
uv pip show requests

# 检查是否有更新
uv pip list --outdated

# 升级包到最新版本
uv pip install --upgrade requests

4.7 离线安装

uv 支持离线模式,这在某些场景下很有用:

# 先在有网环境下载包到目录
uv pip install requests --target ./packages

# 在无网环境从目录安装
uv pip install --offline --target ./packages requests

第五章:Python 版本管理 —— 一个命令切换

5.1 列出可用版本

# 列出所有可用版本
uv python list

# 输出示例:
# cpython-3.13.0+cp313-cp313-manylinux_2_17-x86_64.manylinux2014_x86_64
# cpython-3.12.5+cp312-cp312-manylinux_2_17-x86_64.manylinux2014_x86_64
# cpython-3.11.9+cp311-cp311-manylinux_2_17-x86_64.manylinux2014_x86_64
# ...

5.2 安装指定版本

# 安装 Python 3.12
uv python install 3.12

# 安装特定小版本
uv python install 3.11.9

# 安装最新 3.11
uv python install 3.11

# 安装所有受支持的版本
uv python install 3.8 3.9 3.10 3.11 3.12 3.13

5.3 卸载版本

# 卸载指定版本
uv python uninstall 3.10

# 卸载多个版本
uv python uninstall 3.8 3.9

5.4 在项目中指定版本

pyproject.toml 中指定项目的 Python 版本要求:

[project]
name = "myproject"
version = "0.1.0"
requires-python = ">=3.11"

或者创建 .python-version 文件:

3.11

这样 uv sync 时会自动安装正确的 Python 版本。

5.5 实际使用场景

场景 1:维护多个项目

假设你有两个项目,一个需要 Python 3.11,另一个需要 Python 3.12

# 项目 APython 3.11
cd project-a
uv venv --python 3.11
uv pip install -r requirements.txt

# 项目 BPython 3.12
cd ../project-b
uv venv --python 3.12
uv pip install -r requirements.txt

两个项目使用不同的 Python 版本,互不影响。

场景 2:测试多版本兼容性

# 安装多个版本
uv python install 3.8 3.9 3.10 3.11 3.12

# 在每个版本下运行测试
for v in 3.8 3.9 3.10 3.11 3.12; do
    uv venv --python $v test-env
    .venv\Scripts\Activate.ps1
    uv run pytest
    deactivate
    Remove-Item -Recurse -Force test-env
done

第六章:项目管理 —— 从初始化到运行

6.1 创建新项目

uv init 可以快速初始化新项目:

# 创建基础项目
uv init myproject

# 创建可打包项目(更完整的项目结构)
uv init --package myproject

# 创建库项目
uv init --lib mylibrary

# 创建脚本项目(单文件脚本)
uv init --script myscript.py

6.2 项目结构

uv init 会创建标准的 Python 项目结构:

myproject/
├── .python-version      # Python 版本要求
├── pyproject.toml       # 项目配置
├── README.md            # 自述文件
├── src/
│   └── myproject/       # 源代码目录
│       ├── __init__.py
│       └── main.py
└── tests/
    └── test_example.py  # 测试文件

pyproject.toml 的内容:

[project]
name = "myproject"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = []

6.3 添加依赖

进入项目目录,添加依赖:

cd myproject

# 添加生产依赖
uv add requests
uv add "flask>=2.0"
uv add "numpy>=1.24"

# 添加开发依赖
uv add --dev pytest
uv add --dev black
uv add --dev ruff

# 添加可选依赖
uv add --optional gui pyqt6

添加后,pyproject.toml 会自动更新:

[project]
name = "myproject"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
    "requests>=2.28.0",
    "flask>=2.0",
]

[project.optional-dependencies]
gui = ["pyqt6"]

[tool.uv]
dev-dependencies = [
    "pytest>=7.0",
    "black>=23.0",
]

6.4 运行项目

# 运行主程序
uv run python src/myproject/main.py

# 运行测试
uv run pytest

# 运行脚本
uv run python myscript.py

# 运行带参数的脚本
uv run python myscript.py --arg1 value1

6.5 锁定依赖

在团队协作中,锁定依赖版本很重要:

# 生成锁文件
uv lock

# 同步到锁文件
uv sync

# 升级依赖到最新兼容版本
uv lock --upgrade

# 升级特定包
uv lock --upgrade requests

uv lock 会生成 uv.lock 文件,这是项目的依赖锁文件,应该提交到版本控制系统。

6.6 完整的项目工作流

# 1. 创建项目
uv init myproject
cd myproject

# 2. 添加依赖
uv add flask requests

# 3. 添加开发依赖
uv add --dev pytest black ruff

# 4. 锁定依赖
uv lock

# 5. 在其他机器上同步
uv sync

这个工作流非常简洁,比使用多个工具(pip、pip-tools、poetry)组合要简单很多。


第七章:工具管理(uvx)—— 告别全局安装

7.1 什么是 uvx

uvx 是 uv 的一个配套工具,类似于 Node.js 的 npx。它可以临时运行工具,而不需要全局安装。

7.2 运行常用工具

# 运行 black 代码格式化
uvx black .

# 运行 ruff 代码检查
uvx ruff check .

# 运行 ruff 格式化
uvx ruff format .

# 启动 Jupyter Lab
uvx jupyter lab

# 运行 httpieHTTP 客户端)
uvx --from httpie http GET example.com

# 运行 mypy 类型检查
uvx mypy src/

# 运行 isort 导入排序
uvx isort src/

7.3 安装全局工具

如果你经常使用某个工具,可以全局安装它:

# 安装 black 为全局工具
uv tool install black

# 安装多个工具
uv tool install ruff
uv tool install pytest
uv tool install httpie

# 从 Git 安装
uv tool install --git https://github.com/psf/black black

# 从本地路径安装
uv tool install --path ./mytool mytool

7.4 管理已安装的工具

# 列出已安装的工具
uv tool list

# 输出示例:
# black v24.1.0
# ruff v0.1.0
# pytest v8.0.0

# 升级工具
uv tool upgrade black

# 升级所有工具
uv tool upgrade --all

# 卸载工具
uv tool uninstall black

7.5 工具来源

uv 支持多种工具来源:

# 从 PyPI 安装(默认)
uv tool install black

# 从 Git 仓库安装
uv tool install --git https://github.com/psf/black.git black

# 从 URL 安装
uv tool install --from-url https://example.com/tool.whl mytool

# 从本地文件安装
uv tool install --path ./tool.whl mytool

# 从特定版本安装
uv tool install --python 3.11 black

7.6 使用场景

场景 1:一次性工具

有些工具你可能只偶尔用一次,全局安装太浪费,uvx 就很合适:

# 用 httpie 调试 API
uvx --from httpie http POST api.example.com/items name=test

# 用 cowsay 玩一下
uvx --from cowsay cow "Hello from uvx"

场景 2:尝试新工具

想试试某个新工具,但不确定会不会长期使用:

# 先用 uvx 试试
uvx --from ruff-lsp ruff-lsp

# 觉得好用再全局安装
uv tool install ruff-lsp

场景 3:不同项目用不同版本

有时候不同的项目需要不同版本的工具:

# 项目 A 用新版本
uvx ruff@latest check .

# 项目 B 用稳定版本
uvx ruff@0.3.0 check .

第八章:实战案例 —— 我的日常开发工作流

8.1 场景一:快速创建数据分析环境

这是我的日常场景之一。假设我需要分析一批数据:

# 创建环境
uv venv --python 3.11 data-analysis

# 激活环境
.venv\Scripts\Activate.ps1

# 安装数据处理相关的包
uv pip install pandas numpy matplotlib seaborn jupyter

# 启动 Jupyter Lab
uv run jupyter lab

从创建环境到启动 Jupyter,整个过程不到 30 秒。

8.2 场景二:深度学习项目环境

深度学习项目通常需要较大的依赖包,安装时间长:

# 创建环境
uv venv --python 3.10 dl-project

# 激活环境
.venv\Scripts\Activate.ps1

# 安装 PyTorchGPU 版本)
uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# 安装其他常用包
uv pip install transformers datasets accelerate

# 安装开发依赖
uv pip install pytest pytest-cov black ruff

# 锁定依赖
uv lock

# 分享给队友时,队友只需要:
uv sync

8.3 场景三:Web API 开发

用 FastAPI 开发 REST API

# 创建项目
uv init fastapi-demo --package
cd fastapi-demo

# 添加依赖
uv add fastapi uvicorn pydantic sqlalchemy

# 添加开发依赖
uv add --dev pytest httpx

# 创建应用代码(src/fastapi_demo/main.py
# ...

# 运行开发服务器
uv run uvicorn src.fastapi_demo:app --reload

8.4 场景四:多项目维护

假设你有三个项目需要同时维护:

# 项目 1Web 服务(Flask + Gunicorn
cd web-service
uv run python -c "import flask; print(flask.__version__)"

# 项目 2:数据分析脚本
cd ../data-analysis
uv run python scripts/analysis.py

# 项目 3CLI 工具
cd ../cli-tool
uv run mytool --help

每个项目有独立的虚拟环境和依赖,互不干扰。

8.5 对比我之前的 .NET 开发经验

我之前做过 .NET 开发,dotnet CLI 的工作流让我印象深刻:

# dotnet CLI 工作流
dotnet new webapi -n MyApi
cd MyApi
dotnet add package Microsoft.EntityFrameworkCore
dotnet run

# uv 工作流(几乎一样!)
uv init myapi --package
cd myapi
uv add fastapi uvicorn
uv run uvicorn src.myapi:app --reload

uv 的设计理念和 dotnet CLI 很相似:用统一的命令处理项目全生命周期。这种一致性让从 .NET 转向 Python 的开发者很容易上手。

8.6 完整的团队协作流程

假设你要和新队友协作开发项目:

# 1. 你初始化项目并锁定依赖
uv init team-project
cd team-project
uv add requests flask
uv lock

# 2. 提交到 Git
git add .
git commit -m "Initial project with dependencies"

# 3. 队友克隆项目
git clone https://github.com/team/team-project.git
cd team-project

# 4. 队友同步环境
uv sync

# 5. 队友开始开发
uv run python src/main.py

队友只需要一条 uv sync 命令,就能创建和你完全一致的开发环境。


第九章:进阶技巧与最佳实践

9.1 依赖组管理

uv 支持将依赖分组管理,这在大型项目中很有用:

# 添加开发依赖组
uv add --group dev pytest pytest-cov black ruff mypy

# 添加测试依赖组
uv add --group test httpx coverage

# 添加文档依赖组
uv add --group docs sphinx sphinx-rtd-theme

# 只同步特定组
uv sync --group dev    # 只安装开发依赖
uv sync --group test   # 只安装测试依赖
uv sync                # 安装所有依赖(包括所有组)

# 从特定组卸载
uv remove --group dev black

pyproject.toml 中:

[tool.uv]
dev-dependencies = [
    "pytest>=7.0",
    "black>=23.0",
    "ruff>=0.1.0",
    "mypy>=1.0",
]

[tool.uv.group.test]
dependencies = [
    "httpx>=0.24",
    "coverage>=7.0",
]

9.2 依赖解析与锁定

uv 的依赖解析非常强大:

# 生成锁文件
uv lock

# 查看依赖树
uv tree

# 升级所有依赖到最新兼容版本
uv lock --upgrade

# 升级特定包
uv lock --upgrade numpy

# 查看可升级的包
uv pip list --outdated

9.3 缓存管理

uv 会缓存下载的包以加快后续安装:

# 查看缓存目录
uv cache dir
# 输出:C:\Users\用户名\AppData\Local\uv\Cache

# 清理所有缓存
uv cache clean

# 清理未使用的缓存
uv cache prune

# 设置自定义缓存目录
$env:UV_CACHE_DIR = "D:\uv-cache"

9.4 离线环境

场景 1:从目标目录安装

# 在有网环境下载包到目录
uv pip install requests numpy --target ./packages

# 在无网环境安装
uv pip install --offline --target ./packages requests numpy

场景 2:从 wheel 文件安装

# 在有网环境构建 wheel
uv pip wheel requests numpy

# wheel 文件会保存到当前目录
ls *.whl

# 在无网环境安装
uv pip install requests-*.whl numpy-*.whl

9.5 环境变量配置

uv 支持多种环境变量:

# 指定默认 Python 版本
UV_PYTHON=3.11

# 指定缓存目录
UV_CACHE_DIR=/path/to/cache

# 禁用进度条(CI 环境有用)
UV_NO_PROGRESS=1

# 并行下载数量
UV_CONCURRENT_DOWNLOADS=50

# 超时时间(秒)
UV_HTTP_TIMEOUT=300

# 代理设置
UV_HTTP_PROXY=http://proxy:8080
UV_HTTPS_PROXY=http://proxy:8080

9.6 使用配置文件

你可以在项目根目录创建 uv.toml 进行配置:

# uv.toml
python-version = "3.11"

# 索引 URL(使用国内镜像加速)
index-url = "https://pypi.tuna.tsinghua.edu.cn/simple"

# 严格模式(不兼容的依赖会报错)
resolution = "strict"

# 预发布版本
prerelease = "allow"

使用清华镜像加速(国内用户):

index-url = "https://pypi.tuna.tsinghua.edu.cn/simple"

9.7 与 Docker 配合使用

在 Dockerfile 中使用 uv

# 使用官方 Python 镜像
FROM python:3.12-slim

# 安装 uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv

WORKDIR /app

# 复制依赖文件
COPY pyproject.toml uv.lock ./

# 创建虚拟环境并安装依赖(层缓存优化)
RUN uv sync --frozen --no-install-project --no-dev

# 安装项目本身和开发依赖
RUN uv sync --frozen

# 设置启动命令
CMD ["uv", "run", "python", "src/main.py"]

第十章:总结与资源

10.1 uv 的核心优势

经过这段时间的使用,我总结出 uv 的几大优势:

优势 说明 对比工具
极速 比 pip 快 10-100 倍 pip
统一 一个工具替代六个 pip, conda, poetry, pyenv, virtualenv, pipx
轻量 几 MB vs 几百 MB conda
现代 符合 PEP 标准,支持 PEP 621 poetry
可靠 来自 Astral 公司,ruff 的开发者 -
简单 命令简洁,容易上手 conda

10.2 迁移指南

从 pip 迁移

uv 的 pip 子命令和 pip 完全兼容,你可以直接替换:

# 替代 pip install
uv pip install requests

# 替代 pip uninstall
uv pip uninstall requests

# 替代 pip freeze
uv pip freeze > requirements.txt

# 替代 pip list
uv pip list

从 conda 迁移

# 替代 conda create
uv venv --python 3.11

# 替代 conda activate
.venv\Scripts\Activate.ps1

# 替代 conda install
uv pip install requests

# 替代 conda env export
uv pip freeze > requirements.txt

迁移非常简单,不需要改变任何工作习惯。

10.3 常见问题

Q: uv 会和 pip 冲突吗?

不会。uv 只是 pip 的替代品,不影响 pip 的使用。你可以在同一个项目中同时使用 pip 和 uv(虽然不推荐)。

Q: 我的现有项目能用 uv 吗?

能。直接在项目目录使用 uv pip install -r requirements.txt 即可,uv 兼容 pip 的所有功能。

Q: uv 支持 Windows 吗?

完全支持,而且在 Windows 上性能很好。

Q: uv 支持 Linux/macOS 吗?

支持。uv 支持所有主流平台。

Q: uv 支持私有仓库吗?

支持。你可以通过 --index-url 或配置文件指定私有 PyPI 仓库:

[[tool.uv.index]]
url = "https://private.pypi.org/simple/"

Q: uv 能管理全局 Python 环境吗?

可以,但不推荐。uv 主要用于项目级别的环境管理。全局 Python 建议使用系统包管理器或 pyenv。

10.4 学习资源

官方资源

社区资源

  • Bloghttps:// astral.sh/blog/
  • Twitter@astral_sh
  • GitHub Discussions

10.5 结束语

使用 uv 几个月来,我的 Python 开发体验提升显著。以前要等几十秒的包安装,现在几秒搞定;以前要管理 pip、conda、virtualenv 多个工具,现在一个 uv 全部搞定。

如果你还在用 pip 或 conda,我强烈建议你试试 uv。它不会改变你的工作方式,但会让你的工作快很多。

当然,工具没有最好的,只有最适合的。uv 适合你,就用;不适合,继续用 pip 也没问题。重要的是找到适合自己的工作方式。


附录:命令速查表

安装与配置

操作 命令
安装 uvPowerShell irm https://astral.sh/uv/install.ps1 | iex
安装 uvscoop scoop install uv
安装 uvmacOS brew install uv
安装 uvLinux curl -LsSf https://astral.sh/uv/install.sh | sh
查看版本 uv --version

虚拟环境

操作 命令
创建环境 uv venv
创建指定版本环境 uv venv --python 3.11
激活环境(PowerShell .venv\Scripts\Activate.ps1
激活环境(Bash source .venv/Scripts/activate
退出环境 deactivate

包管理

操作 命令
安装包 uv pip install requests
安装多包 uv pip install requests numpy
指定版本 uv pip install "requests>=2.28"
从文件安装 uv pip install -r requirements.txt
卸载包 uv pip uninstall requests
列出已安装 uv pip list
导出依赖 uv pip freeze > requirements.txt
同步依赖 uv pip sync requirements.txt
升级包 uv pip install --upgrade requests

Python 版本

操作 命令
列出版本 uv python list
安装版本 uv python install 3.12
卸载版本 uv python uninstall 3.10

项目管理

操作 命令
初始化项目 uv init myproject
添加依赖 uv add requests
添加开发依赖 uv add --dev pytest
锁定依赖 uv lock
同步依赖 uv sync
运行脚本 uv run python script.py
运行测试 uv run pytest

工具管理

操作 命令
临时运行工具 uvx black .
安装全局工具 uv tool install black
列出工具 uv tool list
升级工具 uv tool upgrade black
卸载工具 uv tool uninstall black

缓存

操作 命令
查看缓存目录 uv cache dir
清理缓存 uv cache clean
清理未使用缓存 uv cache prune

写作日期2026 年 4 月

作者:刘航宇

参考链接