当前位置:首页>python>uv与pip对比:为什么2026年Python开发者都该用uv

uv与pip对比:为什么2026年Python开发者都该用uv

  • 2026-10-11 05:43:57
uv与pip对比:为什么2026年Python开发者都该用uv

你输入 pip install pandas。

加载动画开始转动。屏幕停在那里 30 秒,有时是一分钟。若是全新环境,甚至需要更久。

现在想象同样的安装在不到 2 秒内完成。

这就是 uv。


什么是 uv

uv 是一个用 Rust 编写的 Python 包管理器,由 Ruff 背后的团队开发(Ruff 是在 2024 年风靡 Python 的代码检查工具)。

可以把它看作是 pip、virtualenv、pyenv、pip-tools 和 pipx 的一体化替代方案,全部打包成一个 2MB 的二进制文件。

一个工具,涵盖整个 Python 工具链。


速度差异

这是亮点,而且非常明显。

冷安装时更快,缓存已热时更快。

为什么?原因有三:

1 Rust,而非 Python。编译型,而非解释型。

2 并行下载。pip 一次只抓一个包,uv 会同时抓取所有包。

3 全局缓存。安装一次 numpy,接下来的 50 个项目瞬间可用——无需重新下载或解压。


安装 uv

你甚至不需要先安装 Python 就能安装 uv。

# macOS / Linuxcurl -LsSf https://astral.sh/uv/install.sh | sh#Windows (PowerShell)powershell -c "irm https://astral.sh/uv/install.ps1 | iex"#或通过 brewbrew install uv检查是否安装成功:

检查是否安装成功,

uv --version# uv 0.5.x

实用命令

1 创建新项目

uv init my-appcd my-app

这会创建:

my-app/├── .python-version    # 固定 Python 版本├── pyproject.toml     # 项目 + 依赖├── main.py└── README.md

不用再执行 python -m venv .venv + pip install -r requirements.txt + source .venv/bin/activate。

一个命令就能搞定。

2 添加依赖

uv add requestsuv add pandas numpy matplotlib

这会:

  • 安装包

  • 更新 pyproject.toml

  • 更新 uv.lock(锁文件)

  • 如果虚拟环境不存在则创建

一步完成。

3 添加仅开发用依赖

uv add --dev pytest ruff mypy

开发依赖与运行时依赖分开,生产构建更干净。

4 移除依赖

uv remove requests

这是 uv 悄悄超越 pip 的地方。

pip uninstall requests 只删除 requests,留下所有中间依赖包,慢慢堆积在你的环境里。

uv remove 会同时清理孤立依赖。

5 运行代码

uv run main.pyuv run pytest

无需 source .venv/bin/activate,无需担心用的是哪版 Python。

uv run 会自动激活该命令需要的环境。

6 从锁文件同步

uv sync

当你克隆仓库或拉取新变更时使用。它会重建环境,完全匹配 uv.lock——在 macOS、Linux、Windows 上可重现。

这就是“在我机器能跑在你机器上崩溃”的终结者。

7 管理 Python 版本

不再需要 pyenv。

uv python install 3.12uv python install 3.13uv python pin 3.12

uv 会为你下载并管理 Python 版本。

8 安装全局工具(替代 pipx)

uv tool install ruffuv tool install black

全局隔离安装,不污染任何项目环境。


从 pip 迁移

这是大多数开发者担心的部分,实际情况是毫无痛苦。

如果项目使用 requirements.txt:

cd my-existing-projectuv init                              # 创建 pyproject.tomluv pip install -r requirements.txt   # 安装到新 venv

uv pip 前缀是兼容层,它接受 pip 的所有参数。此时你可以把 uv 当作“更快的 pip”。

或者全面采用 uv:

uv add $(cat requirements.txt)

它会把依赖转换为 pyproject.toml 和 uv.lock。

如果项目使用 Poetry:

pipx run migrate-to-uv

就这样,你的 pyproject.toml 已转换为 uv 格式。


何时继续用 pip

老实说,uv 并非适用于所有场景。

继续用 pip 的情况:

  • 在 Docker 镜像中只预装了 pip,不想增加额外工具

  • 维护遗留生产系统,更换工具带来风险但无实际好处

  • 教 Python 初学者,希望减少概念复杂度

  • CI 环境严格控制允许使用的工具

其他情况 -> 新项目、附带项目、追求速度与可重现性,uv 更佳。


真实案例对比

搭建新的 FastAPI 项目。

用 pip:

mkdir my-api && cd my-apipython -m venv .venvsource .venv/bin/activatepip install fastapi uvicorn sqlalchemypip freeze > requirements.txt

5 条命令,约 40 秒。

用 uv:

uv init my-api && cd my-apiuv add fastapi uvicorn sqlalchemy

2 条命令,约 3 秒,直接得到真实锁文件,而非在不同操作系统下容易出问题的 pip freeze。


uvx——运行工具而无需安装

这是被低估的功能。

uvx 可以在临时隔离环境中运行 Python CLI 工具,无需在系统中安装。

uvx ruff check .uvx black my_script.pyuvx pycowsay "Hello"

首次运行,uv 会把工具下载到缓存,之后运行瞬间完成。

可以把它看作 Python 的 npx。

为什么有用

你不总是想安装工具。有时只想运行一次:

  • 在提交前尝试单文件 linter

  • 运行一次性 CLI 而不污染全局 Python

  • 针对某个命令使用特定版本工具

# 尝试 black 而不全局安装uvx black .# 使用特定版本uvx black@24.10.0 .# 从不同包运行工具uvx --from httpie http GET httpbin.org/get

uvx 与 uv tool install

常见混淆点:

  • uvx ruff -> 运行 ruff 在临时环境中,不安装

  • uv tool install ruff -> 全局安装 ruff,可直接在 PATH 中使用

尝试新东西用 uvx,每天都用的工具用 uv tool install。

真实案例

# 提交前格式化项目uvx ruff format .# 运行 pytest 不污染项目依赖uvx pytest# 从 cookiecutter 模板生成项目uvx cookiecutter gh:audreyr/cookiecutter-pypackage# 终端快速发起 HTTP 请求uvx --from httpie http POST httpbin.org/post hello=world

无虚拟环境,无 pip 安装,无清理烦恼。


pip 已经作为 Python 默认包管理工具18年了,稳定且无处不在,现在依然有效。

但 uv 解决了 pip 从未尝试过的问题:

  • 速度显著提高,改变 CI 成本与反馈周期

  • 一个工具替代五个

  • 跨平台锁文件真正可用

  • 干净卸载,不留垃圾

2026 年的新项目,没有理由从 pip 开始。

第一次 uv sync 完成得比你手指敲键盘还快时,你就会明白。 :)

参考

https://medium.com/stackademic/uv-vs-pip-why-every-python-developer-should-switch-in-2026-d6c3f891f7b1

最新文章

随机文章