再见 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.toml 和 uv.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,你会感觉到什么叫丝滑。
