UV-高性能Python包管理工具

UV-高性能Python包管理工具

fanz Lv3

~~好久没写博客了,自从上月去导师公司体验早九晚五的工作生活之后,每天回来就想开躺,Obsidian都懒得开了(在此为我的懒惰道歉😭)。

不过总体说来,这一个月在项目架构、打包部署方面收获还是挺多,之前干的活基本都是堆屎造梦,当发生改动的时候很可能要修改很多东西,甚至是要重写。这一个月以来主要是对之前项目进行解耦,提前约定好各个模块的输入和输出格式,每个人可以先做自己的模块,然后我再负责整合各个模块到最终框架上。

也就是在重构之前的一个模块的时候,师兄和我说他改用uv管理包了,我乍一听一头雾水,这是什么东西??然后师兄和我解释说这是一个和pip、poetry那样的包管理工具,不过比其他工具更方便。我自己在网上搜索后发现uv的star还挺高的,而且数据报告都说uv速度快、操作方便。本篇博客就简单谈一下我对uv的理解,更多使用方法还是看官方文档更好0。

什么是uv

官网 https://hellowac.github.io/uv-zh-cn/ 的介绍比较简约:一个用 Rust 编写的极快 Python 包和项目管理工具。最吸引我的亮点是:pip 快 10-100 倍

安装教程官网写的已经很详细了,这里只粘贴一下windows上安装uv的命令:

1
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

uv和conda的区别

uv给我的感觉和npm、yarn等很像,它可以用来快速创建Python项目(conda则是虚拟环境管理工具),并且对项目的依赖管理和打包部署非常友好。我个人觉得uv相比于conda最大的优势就在于打包部署,不需要提前部署环境,只需要简单的uv syncuv run uv就可以自动创建好环境并下载好全部依赖,进而运行项目。

之前使用conda进行开发的流程一般是这样的:

  1. 创建一个新的conda环境,选择python版本号;
  2. 开发项目,开发完成时将项目依赖导出到requirements.txt
  3. 在服务器安装Anaconda,创建相同版本的conda环境,然后git同步代码,激活所创建环境,然后pip install -r requirements.txt;

这个流程是比较清晰的,不过麻烦的地方在于,首先在服务器和本机上都必须装好Anaconda,但是Anaconda本身非常笨重,很多依赖包有的时候并没用上,而且占用存储空间确实太大了。这是我最近几个项目的python环境,光是环境就已经吃了20G空间(当然每个环境其实都有很多依赖包没有用上),Anaconda本身又占用了10+G的空间。

image.png

另外一个不方便的地方在于,如果我们已经部署好某个项目,然后我们在这个基础上又安装了别的包,安装起来容易,可是如果想回归最初的状态就很困难了。还有不同系统上安装Anaconda的教程还不一样,流程较为繁杂。

可是换成uv管理之后,流程就可以简化成这样:

  1. 使用 uv init创建一个新的项目,可以指定python版本,项目的.venv文件夹下会自动创建python虚拟环境;
  2. 通过 uv add 为项目添加依赖包,uv add 添加的包会自动在toml文件中更新,便于同步和管理;
  3. 项目搭建好之后,不需要额外的部署操作,只需要在服务器中执行uv sync,服务器的当前文件夹下会自动创建一个python环境,并且安装好对应的依赖,项目环境就这样部署好了;
  4. uv安装简单,在windows和linux上都只需要一句命令就可以搞定;
  5. uv兼容pip命令,并且比之更快,使用uv pip可以为当前的虚拟环境安装包,不过uv pip安装的包不会在toml文件中更新,使用uv sync之后会将没在toml文件中的包删除。
Note

uv pip 和 uv add有什么区别?

uv pip主要是用于当前的虚拟环境本身,更适用于测试使用,其安装的内容不会写在项目toml文件中,也即不会自动同步。如果想同步还是需要uv pip freeze导出requirements.txt,然后使用传统的 uv pip install进行同步。

uv add 更适合项目。uv add在安装包的同时还会更新项目的toml文件,只要是使用 uv add的包使用uv sync的时候会自动安装好。我个人体验感觉做项目的时候最好还是用 uv add,因为 pip freeze 容易将一些无用的包也导出到 requirements.txt,需要其他方法来优化。而uv add规避掉了这个缺陷,同步起来也更方便。

个人推荐:如果是自己做新的项目推荐都用 uv add,方便管理且简洁;如果是在别人的基础上继续搭建项目,而且别人用的是requirements.txt那一套,那使用uv pip也是可以的。

uv常用命令

1.创建新项目

1
2
3
4
5
# 创建新项目
uv init example-app

# 打包
uv init --package example-pkg

2.添加包、删除包

1
2
3
4
5
uv add 'httpx>=0.20'

uv add "httpx @ git+https://github.com/encode/httpx"

uv remove httpx

3.创建虚拟环境

1
2
3
4
5
#以my-name命名,创建一个虚拟环境
uv venv my-name

# linux上激活当前项目的环境
source .venv/bin/activate

4.列出已安装的包

1
2
3
4
5
6
# 列出环境中已安装的包
uv pip list
# 以json格式列出包
uv pip list --format json
# 以requirements.txt列出环境中的所有包
uv pip freeze

当然,uv的使用还有更多信息,关于 pyproject.tomluv.lock这些配置文件的编写我自己也还不是特别了解,之后学习后会再更新博客!!

  • 标题: UV-高性能Python包管理工具
  • 作者: fanz
  • 创建于 : 2025-04-10 11:06:39
  • 更新于 : 2025-04-10 19:49:46
  • 链接: https://redefine.ohevan.com/suhfb3/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
目录
UV-高性能Python包管理工具