[Python/依赖管理] Python 包与环境管理工具: UV

news/2025/12/6 0:05:06/文章来源:https://www.cnblogs.com/johnnyzen/p/19314102

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 := Python 包与环境管理工具

uv是什么?

  • uvAstral 公司开发了一款新的Python包管理工具

提到Astral,你可能会想起他们去年发布的Ruff
那个用Rust写的Python linter,速度快到离谱,现在已经是很多项目的标配

  • uv目前在Github斩获73k的star。

https://github.com/astral-sh/uv

image

  • Slogan :

An extremely fast Python package and project manager, written in Rust.
一款用Rust编写的、非常快的Python包和项目管理器。

  • 2024 年 2 月首次发布,当时的定位是更快的pip。几个月后,功能大幅扩展,变成了一个统一的Python工具链

  • 现在的uv,官方说可以替代pippip-toolspipxpoetrypyenvvirtualenv这一堆工具。

性能实测:快得离谱

  • 先说性能,这是uv最吸引人的地方。

官方说uv比pip快10-100倍。一开始有大佬觉得这数字有点夸张,但看了一些真实案例后,确实差不多。

image

  • 典型案例: 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)和【硬链接】技术。

这意味着,同一个包在多个【虚拟环境】中共享,不会占用多倍的【磁盘空间】。

  • 最后是,依赖解析算法

依赖解析是【包管理】中最复杂的部分。
uv使用了【更高效的算法】来解析【依赖图】,支持平台无关的解析,还能生成跨平台的【锁文件】。
这不只是快,还更可靠。

不只是快:功能全面

  • 【速度】,只是uv的一个卖点。让人更感兴趣的是,它想成为一个【全能工具】。
  • 最基础的功能:uv可以完全替代pip
# 传统方式
pip install requests# uv方式
uv pip install requests
  • 命令几乎一样,学习成本很低。
  • 而且uv还支持很多pip没有的高级特性,比如依赖版本覆盖、更灵活的解析策略等。
  • 首先,uv可以像Poetry一样管理整个项目:
# 初始化项目
uv init my-project# 运行项目
uv run main.py# 生成跨平台锁文件
uv lock# 同步环境
uv sync

生成的lockfile,确保团队成员和CI环境都用完全相同的依赖版本。

  • uv也可以用于Python的版本管理(替代 pyenv),这个功能让我挺意外的:
# 安装 Python 3.12
uv python install 3.12# 在当前目录下使用特定版本
uv python pin 3.12
  • uv可以直接下载和管理Python版本,不需要额外装pyenvpythonbrew
  • uv也可以用于工具管理(替代 pipx),比如说需要安装一个【全局命令行工具】?
# 安装工具
uv tool install ruff# 或一次性运行,不安装
uvx ruff check .

uvx这个命令特别方便,想临时用一个工具的时候,不需要先装到全局环境。

  • uv还支持单文件Python脚本的依赖管理

你可以在脚本开头声明依赖,然后用uv run script.py直接运行,uv会自动处理依赖安装和环境隔离。
这对写一些小工具脚本非常友好。

uv 的优势

  • 速度极快:由于使用 Rust 编写,uv 的性能远超 pip 和其他包管理工具,安装依赖的速度可以提升 10-100 倍。
  • 功能集成:集成语法分析、依赖解析、包安装、环境管理和 Python 版本管理于一体,无需再安装和学习多个工具。
  • 确定性构建:uv 会生成 uv.lock 文件,确保在任何环境中都能安装完全相同的依赖版本,避免 "在我机器上能运行" 的问题。
  • 与现有工具兼容:uv 可以处理 requirements.txt 和 pyproject.toml,可以无缝替代现有工作流中的 pip。

uv能不能替代Conda / Pip?

  • 这取决于使用场景:
  • uv专注于Python依赖包管理,对于纯Python项目,它完全够用,而且更快更轻量。
  • Conda可以管理【系统级依赖】(比如:CUDA、各种C库),在科学计算和深度学习领域,Conda还是有它的生态位置。
  • 另外,有些CI平台对uv的支持还在完善中,可能需要自己写一点额外的配置。
  • 偶尔会遇到一些包的构建问题,特别是那些有C扩展的老包。

不过这种情况不多,而且一般切回pip就能解决。

  • 推荐做法:纯Python项目用uv,需要系统依赖的项目(比如 PyTorch GPU 版)还是用pip或者Conda。

  • 应该对这些新的工具保持一点耐心,也许未来上述这种场景也将会被弥补上来。

"这就像你的Vibe Coding工具,在没用Claude Code之前,你用其他工具觉得非常好用。但是一旦用了Claude Code之后,就很难再用回其他工具。"

2 安装使用篇

说了这么多,不如亲自试一试。

2.1 安装 UV

  • uv不需要预先安装PythonRust,安装脚本会处理所有依赖。

2.1.1 安装 on MacOS/Linux

brew install uv或:
curl -LsSf https://astral.sh/uv/install.sh | sh

2.1.2 安装 on Windows

  • CMD or PowerShell 窗口:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

image

安装日志:

C:\Users\EDY>powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"                                                              Downloading uv 0.9.15 (x86_64-pc-windows-msvc)                                                                                                               Installing to C:\Users\EDY\.local\binuv.exeuvx.exeuvw.exe
everything's installed!To add C:\Users\EDY\.local\bin to your PATH, either restart your shell or run: (为了便于基于 uv 命令便捷/快速地使用,可自行配置 PATH 环境变量 或执行:)set Path=C:\Users\EDY\.local\bin;%Path%   (cmd)$env:Path = "C:\Users\EDY\.local\bin;$env:Path"   (powershell)

2.2 安装验证

  • 安装完成后,验证安装是否成功:
uv --version

输出内容类似如下,表明安装成功:

uv 0.9.15 (5eafae332 2025-12-02)或:
uv 0.8.14 (Homebrew 2025-08-28)
...

2.3 管理 Python 版本

  • uv 可以轻松管理多个 Python 版本,无需额外安装 pyenv 等工具。

查看可用的 Python 版本

uv python list

输出结果类似如下:

C:\Users\EDY>uv python list
cpython-3.15.0a2-windows-x86_64-none                 <download available>
cpython-3.15.0a2+freethreaded-windows-x86_64-none    <download available>
cpython-3.14.1-windows-x86_64-none                   <download available>
cpython-3.14.1+freethreaded-windows-x86_64-none      <download available>
cpython-3.13.10-windows-x86_64-none                  <download available>
cpython-3.13.10+freethreaded-windows-x86_64-none     <download available>
cpython-3.12.12-windows-x86_64-none                  <download available>
cpython-3.11.14-windows-x86_64-none                  <download available>
cpython-3.10.19-windows-x86_64-none                  <download available>
cpython-3.10.11-windows-x86_64-none                  AppData\Local\Programs\Python\Python310\python.exe
cpython-3.9.25-windows-x86_64-none                   <download available>
cpython-3.8.20-windows-x86_64-none                   <download available>
pypy-3.11.13-windows-x86_64-none                     <download available>
pypy-3.10.16-windows-x86_64-none                     <download available>
pypy-3.9.19-windows-x86_64-none                      <download available>
pypy-3.8.16-windows-x86_64-none                      <download available>
graalpy-3.12.0-windows-x86_64-none                   <download available>
graalpy-3.11.0-windows-x86_64-none                   <download available>
graalpy-3.10.0-windows-x86_64-none                   <download available>

安装特定版本的 Python

# 安装最新的 Python 3.12
uv python install 3.12# 安装特定版本
uv python install 3.11.6# 安装 PyPy 版本
uv python install pypy3.10

设置全局默认 Python 版本

uv python default 3.12

在项目中指定 Python 版本

# 为当前项目固定 Python 3.11
uv python pin 3.11

这会创建 .python-version 文件,标识项目所需的 Python 版本。

2.4 管理虚拟环境

  • 创建并激活虚拟环境:
# 创建名为 .venv 的虚拟环境(默认)
uv venv# 激活环境(macOS/Linux)
source .venv/bin/activate# 激活环境(Windows)
.venv\Scripts\activate

2.5 依赖包管理

  • 安装依赖包:
# 安装最新版本
uv pip install requests# 安装特定版本
uv pip install requests==2.31.0# 从 requirements.txt 安装
uv pip install -r requirements.txt
  • 安装包到开发环境:
uv pip install --dev pytest
  • 升级包:
uv pip upgrade requests
  • 卸载包:
uv pip uninstall requests
  • 导出依赖:
# 导出当前环境的依赖
uv pip freeze > requirements.txt# 导出生产环境依赖(排除开发依赖)
uv pip freeze --production > requirements.txt

2.5 项目管理

  • uv 支持 pyproject.toml 格式的项目管理,这是现代 Python 项目的标准配置文件

  • 初始化一个新项目:

uv init my_project
cd my_project

这会创建基本的项目结构和 pyproject.toml 文件。

  • 安装项目的依赖:
uv sync

这个命令会根据 pyproject.tomlrequirements.txt 安装所有依赖。类似于 pip install -e . 但更高效。

说明:

uv sync 是一个依赖管理命令,它的作用类似于您可能更熟悉的 pip install -r requirements.txt,但更快、更强大、更可靠。
您可以把它理解为:"一键安装这个项目正常运行所需的所有第三方软件包(依赖库)"。
uv sync 如果安装太慢,可以设置国内镜像源 https://pypi.tuna.tsinghua.edu.cn/simple:在项目根目录的 pyproject.toml 文件 [tool.uv] 处设置 index-url:[tool.uv]
index-url = "https://pypi.tuna.tsinghua.edu.cn/simple"

2.x 使用场景集

2.x.1 场景: pip 的平替

  • 如果你只想把uv当作更快的pip,直接替换命令就行:
# 创建虚拟环境
uv venv# 激活环境(和之前一样)
source .venv/bin/activate   # macOS/Linux
.venv\Scripts\activate     # Windows# 安装包
uv pip install pandas numpy# 导出依赖
uv pip freeze > requirements.txt# 从文件安装
uv pip install -r requirements.txt
  • 基本上就是把pip换成uv pip,其他都一样。

  • 对于已有项目,如果需要迁移的话,可以采样【渐进式迁移方式】:

  • 先在本地开发环境试用uv
  • 验证没问题后,更新CI/CD配置
  • 团队成员逐步切换
  • 另外,因为uvpip兼容的,【迁移过程】中几乎不会出现环境上冲突。

2.x.2 迁移到 uv

如果你正在使用其他工具,可以轻松迁移到 uv:

  • 对于使用 pip + virtualenv 的项目:
# 创建并激活 uv 虚拟环境
uv venv
source .venv/bin/activate# 安装依赖
uv pip install -r requirements.txt
  • 对于使用 pip-tools 的项目:
uv pip compile requirements.in -o requirements.txt
uv pip sync
  • 对于使用 poetry 或 pdm 的项目:
# 直接使用现有的 pyproject.toml
uv sync

Y 推荐文献

  • UV
  • docs : https://docs.astral.sh/uv/
  • github : https://github.com/astral-sh/uv
  • [Python3] Python 基础教程 - 博客园/千千寰宇

  • [Python] 包管理器Pip - 博客园/千千寰宇

  • [Python] Miniforge: 开源版conda环境管理器 - 博客园/千千寰宇

  • [Python/虚拟环境/包管理] conda:多环境管理与包管理器 - 博客园/千千寰宇

  • [Python] Python 虚拟环境管理 - 博客园/千千寰宇

X 参考文献

  • 2025年,Python包管理工具已经由pip变成了uv? - Weixin/机器学习实验室 2025.11.13

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/989362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

# Assemble 知识库导航

📚 Assemble 知识库导航本知识库同步到博客,本文档作为博客首页置顶导航本文档为知识库内容导航,下方链接为各主题分类下的精选文章概括,涵盖技术报告、AI编程实践、学术论文、行业观察等核心内容,便于快速定位和…

# Assemble 知识库导航

📚 Assemble 知识库导航本知识库同步到博客,本文档作为博客首页置顶导航本文档为知识库内容导航,下方链接为各主题分类下的精选文章概括,涵盖技术报告、AI编程实践、学术论文、行业观察等核心内容,便于快速定位和…

# 创业公司技术开发失败案例:从技术选型到公司倒闭的血泪教训

关联知识库:# 创业公司技术开发失败案例:从技术选型到公司倒闭的血泪教训创业公司技术开发失败案例:从技术选型到公司倒闭的血泪教训案例背景:一位开发者在2022年6月加入了一家小型创业公司,老板不懂技术也不懂管…

# 结构化拖延批判性分析:John Perry案例

关联知识库:# 结构化拖延批判性分析:John Perry案例结构化拖延批判性分析:John Perry案例 核心观点梳理结构化拖延将“逃避更重要任务”的冲动转化为完成次优任务的驱动力,强调通过任务排序制造“看似紧急”的替代…

利用desmos动态展示最大似然概率

最近碰到最大似然概率的问题,题目一变就出错,痛心!深感没有搞清楚这个求解的意义,有必要搞清楚最大似然值和概率是什么。 传统概率视角:给定参数θ,数据X出现的可能性 \(P(X∣θ)\) 统计推断视角:我已经看到了数…

# 程序员副业陷阱深度解析:万字泣血总结与回归主业之路

关联知识库:# 程序员副业陷阱深度解析:万字泣血总结与回归主业之路程序员副业陷阱深度解析:万字泣血总结与回归主业之路 文章概览 原文标题:《万字泣血解析割韭菜内情,程序员别老想着做副业》 作者:程序员济癫(…

# RAG讣告批判性阅读报告:Agent Search是革命还是过度乐观?

关联知识库:# RAG讣告批判性阅读报告:Agent Search是革命还是过度乐观?RAG讣告批判性阅读报告:Agent Search是革命还是过度乐观?原文:The RAG Obituary: Killed by Agents, Buried by Context Windows 作者:Ni…

# ⏳ 大厂等死现象深度解析:职场轮回与生存策略

关联知识库:# ⏳ 大厂等死现象深度解析:职场轮回与生存策略⏳ 大厂"等死"现象深度解析:职场轮回、生存策略与自救路径 文章概览 原文标题:《在大厂等"死"的中年人》 来源:36氪 / 有界UnKnown…

LlamaIndex API Example - 2

关联知识库:LlamaIndex API Example - 2create retriever by index from llama_index.core import SummaryIndex, SimpleDirectoryReader documents = SimpleDirectoryReader("files").load_data() summary…

# Nothing Beats Kindness:善意是连接同事间距离的最快桥梁

关联知识库:# Nothing Beats Kindness:善意是连接同事间距离的最快桥梁Nothing Beats Kindness:善意是连接同事间距离的最快桥梁文章来源:Nothing Beats Kindness - The Coder Cafe 发布时间:2025年11月13日 作者…

加州第13号法案 - 房产税改革的历史镜鉴

关联知识库:加州第13号法案 - 房产税改革的历史镜鉴加州第13号法案 - 房产税改革的历史镜鉴 法案概述 核心内容 加州第13号提案(Proposition 13)于1978年通过,全称为"人民限制财产税计划",是美国税制史…

主流AI编程工具横向对比与选型指南【From DeepSeek-V3】

关联知识库:主流AI编程工具横向对比与选型指南【From DeepSeek-V3】主流AI编程工具横向对比与选型指南【From DeepSeek-V3】最后更新:2025年9月 | 本文档旨在对当前市场上的主流AI编程助手进行系统性梳理和对比,为开…

主流AI编程工具横向对比与选型指南【From DeepSeek-V3】

关联知识库:主流AI编程工具横向对比与选型指南【From DeepSeek-V3】主流AI编程工具横向对比与选型指南【From DeepSeek-V3】最后更新:2025年9月 | 本文档旨在对当前市场上的主流AI编程助手进行系统性梳理和对比,为开…

软件工程学习日志2025.12.5

今日学习主题 使用Bootstrap框架设计与构建响应式网站 学习内容总结 一、Bootstrap基础知识框架简介:Bootstrap是目前最流行的前端框架,由Twitter团队开发,用于快速构建响应式和移动优先的网站 核心特点:开源免费、…

RAG通识

关联知识库:RAG通识起源:Meta发布RAG论文 2020年,Meta发布 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks https://arxiv.org/abs/2005.11401 why RAG?数据滞后 企业知识库向量化,提供特定上…

# MCP生态全景调研:协议、框架与实现全景图(2025-01)

关联知识库:# MCP生态全景调研:协议、框架与实现全景图(2025-01)MCP生态全景调研:协议、框架与实现全景图调研时间:2025年1月 协议发布:2024年11月(Anthropic) 生态状态:快速发展期,框架分散但标准化趋势明…

《Llamaindex大模型RAG开发实践》笔记

关联知识库:《Llamaindex大模型RAG开发实践》笔记Workflowimport data(llamaHub) create doc from source data create textNode from docs create index from textNodeimport dataxxReader cloud serviceData to Doc…

CMake初探篇一

CMake初探篇一CMake初探篇一 目录CMake初探篇一1. 什么是 CMake2. 构建流程1、创建构建目录2、使用 CMake 生成构建文件3、编译和构建4、清理构建文件3. CMake快捷帮助1. 基础帮助命令2. 帮助分类查看3. 查找特定帮助4…

# AWS全球宕机:DNS故障引发互联网级连锁反应

关联知识库:# AWS全球宕机:DNS故障引发互联网级连锁反应AWS全球宕机:DNS故障引发互联网级连锁反应案例背景:2025年10月21日,亚马逊AWS服务发生大规模宕机,影响超过1000家企业,波及数百万网络用户。故障源于美国…

# 智能编辑器与传统IDE混合使用实践指南

关联知识库:# 智能编辑器与传统IDE混合使用实践指南智能编辑器与传统IDE混合使用实践指南核心观点:Cursor等AI编辑器擅长代码生成,但传统IDE(IDEA、PyCharm)在调试、重构、项目管理方面体验更优。实践中应结合使用,…