Python依赖管理工具,如何实现高效的环境管理?
摘要:0 序 学习一款新的Python依赖包管理与环境管理工具: UV。 "最近几个月,我注意到一个现象:看到的新开源项目里,越来越多开始在README里写uv pip install而不是pip install。&am
0 序
学习一款新的Python依赖包管理与环境管理工具: UV。
"最近几个月,我注意到一个现象:看到的新开源项目里,越来越多开始在README里写uv pip install而不是pip install。"
2025年,Python包管理工具已经由pip变成了uv? - Weixin/机器学习实验室 2025.11.13
全文主要摘自此篇。
比如最近与Kimi K2 Thinking一起发布的Kimi CLI就是通过uv命令安装的:
uv tool install --python 3.13 kimi-cli
在 Python 开发中,包管理和环境隔离是每个开发者都会遇到的问题。
无论是 pip 的缓慢、virtualenv 的繁琐,还是 conda 的臃肿,都让开发者们期待一个更高效的解决方案。
1 概述: UV := Universal Virtual := Python 包与环境管理工具
uv是什么?
uv (Universal Virtual) 是 Astral 公司开发了一款新的Python包管理工具。
提到Astral,你可能会想起他们去年发布的Ruff。
那个用Rust写的Python linter,速度快到离谱,现在已经是很多项目的标配。
uv目前在Github斩获73k的star。
https://github.com/astral-sh/uv
Slogan :
An extremely fast Python package and project manager, written in Rust.
一款用Rust编写的、非常快的Python包和项目管理器。
2024 年 2 月首次发布,当时的定位是更快的pip。几个月后,功能大幅扩展,变成了一个统一的Python工具链。
现在的uv,官方说可以替代pip、pip-tools、pipx、poetry、pyenv、virtualenv这一堆工具。
性能实测:快得离谱
先说性能,这是uv最吸引人的地方。
官方说uv比pip快10-100倍。一开始有大佬觉得这数字有点夸张,但看了一些真实案例后,确实差不多。
典型案例: 2024年4月,Streamlit把所有用户的包管理从pip切换到了uv。
结果是什么?
平均依赖安装时间从60秒降到了20秒,应用部署时间直接提升了55%。
这不是实验室数据,是真实的生产环境,每天数万个应用在跑。
包安装速度对比(无缓存):
安装pandas:1.22s (uv) vs 2.62s (pip) - 快 53%
安装numpy + scipy + torch:3.5s (uv) vs 14.8s (pip) - 快 4.2 倍
解析50+ 包的requirements.txt:5.1s (uv) vs 28.4s (pip) - 快 5.6 倍
有缓存的情况下:
Jupyter Notebook项目解析:0.57s(冷启动)→ 0.02s(温缓存)
这个速度提升就是几十倍到上百倍了
虚拟环境创建:
uv创建虚拟环境比python -m venv快80倍
比virtualenv快7倍
除了速度快,【资源占用】也更少:
CPU 使用:68% (uv) vs 92% (pip)
内存占用:210MB (uv) vs 450MB (pip)
这意味着,在CI/CD环境或者【资源受限】的机器上,uv的优势会更明显。
为什么性能这么快?
看到这些数据,你可能会好奇:uv凭啥这么快?
首先,编程语言。
pip是用Python写的,uv用的是Rust。Rust是系统级编程语言,性能接近 C/C++。
这是基础性能差异。
其次,uv充分利用了Rust的并发特性。
传统的pip在下载和安装包时,大部分操作是串行的; 而uv可以同时处理多个依赖的下载、构建和安装。
在依赖树比较复杂的项目里,这种【并发处理】带来的提升非常明显。
此外,uv还有一个【全局模块缓存系统】。
当你第一次安装一个包后,uv会把它缓存起来。
下次再安装同样的包(可能是在不同的项目里),uv直接从缓存读取,甚至不需要重新下载。
而且在支持的文件系统上,uv使用【写时复制】(Copy-on-Write)和【硬链接】技术。
这意味着,同一个包在多个【虚拟环境】中共享,不会占用多倍的【磁盘空间】。
最后是,依赖解析算法。
依赖解析是【包管理】中最复杂的部分。
