再见 pip,你好 uv——Python 包管理进入秒级时代

今天聊一个能让你省命的工具——uv。 如果你…

今天聊一个能让你省命的工具——uv。

如果你写过 Python,你一定经历过这些:pip install 慢得像蜗牛、虚拟环境管理一团乱、依赖冲突搞到半夜、换台机器又要重新折腾一遍环境。

uv 是 Astral 团队(就是做 ruff 那帮人)用 Rust 写的 Python 包管理器和项目管理工具。它把 pip、pip-tools、virtualenv、pipx、pyenv 这些工具的功能全部整合进一个二进制文件里,同时速度比 pip 快 10 到 100 倍。

不夸张。装同一个包,pip 还在解析依赖树的时候,uv 已经装完开始跑了。

一、装上就能用

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

# 装完验证
uv --version

一条命令搞定,不需要 Python 预装——uv 自己会管理 Python 版本。

二、uv 能干什么

核心就三件事:装包、管环境、管项目

1. 替代 pip install

# 跟 pip 用法几乎一样,但快得多
uv pip install requests flask numpy pandas

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

# 全局装命令行工具(替代 pipx)
uv tool install ruff
uv tool install httpie

2. 替代 virtualenv / venv

# 创建一个 .venv 虚拟环境
uv venv

# 指定 Python 版本(uv 会自动下载)
uv venv --python 3.12

# 激活(跟以前一样)
source .venv/bin/activate

3. 管理整个项目(这才是杀手锏)

# 初始化一个新项目
uv init my-project
cd my-project

# 添加依赖
uv add requests
uv add --dev pytest ruff

# 运行脚本
uv run python main.py

# 锁定依赖版本
uv lock

执行 uv init 后会自动生成 pyproject.toml。之后 uv add 不仅装包,还会自动更新 pyproject.tomluv.lock,再也不用手动维护依赖清单。

三、实际场景:从零搭一个项目

假设你要写一个用 FastAPI 做 API、用 httpx 发请求的小服务。传统流程是:装 Python → 创建 venv → 激活 venv → pip install 一堆包 → 手动写 requirements.txt → 祈祷没有冲突。

用 uv 是这样的:

uv init api-server
cd api-server
uv add fastapi uvicorn httpx
uv run uvicorn main:app --reload

四行命令,Python 环境、依赖、运行全部就绪。uv 会自动下载合适版本的 Python(如果你没装的话),创建隔离环境,解析依赖树并锁定版本。

四、一些真实体验

  • 速度是真的快——装一个 Django 项目全套依赖,pip 要 45 秒,uv 只要 3 秒。不是错觉,是 Rust 解析器 + 并行下载的结果。
  • 依赖解析靠谱——uv 用的解析器跟 Rust 的 Cargo 同款算法,冲突时会给出明确的错误信息,不像 pip 那样甩一脸红字让你自己猜。
  • 锁文件是真的锁得住——uv.lock 是跨平台的,Linux 和 macOS 上装出来版本完全一致,CI/CD 环境再也不会”我本地能跑啊”。
  • 渐进式迁移——已有项目不需要大改。你可以只把 pip install 换成 uv pip install,其他不动,一样享受加速。

五、什么时候不适合用 uv

说实话,大部分场景都适合。但如果你在维护一个古老的 Python 2 项目,或者深度依赖某个 pip 的偏门插件,可能需要评估兼容性。不过对于 2024 年以后的新项目,uv 几乎是无脑首选。

六、总结

我不是那种喜欢追新工具的人,但 uv 用了一次就回不去了。它解决的不是一个新问题,而是把老问题(装包慢、环境乱、依赖冲突)解决到了你不用再为它操心的程度。

如果你还没试过,现在就跑一条 curl -LsSf https://astral.sh/uv/install.sh | sh。三分钟后你会回来谢我。

下次项目初始化的时候,试试 uv init 而不是 mkdir + python -m venv + pip install,你会感觉到什么叫丝滑

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注