当前位置: 首页 > article >正文

uv: 一个统一的Python包管理工具

uv是由Astral公司开发的一个极其快速的Python包管理器,完全用Rust编写。它最初在2月份发布,作为pip工作流的替代品。现在,uv已经扩展成为一个端到端的解决方案,可以管理Python项目、命令行工具、单文件脚本,甚至Python本身。可以说,uv就像是Python界的Cargo:一个快速、可靠、易用的统一接口。

主要特性

uv具有以下主要功能:

端到端项目管理:
通过uv runuv lockuv sync,uv可以基于标准元数据生成跨平台的锁文件,并从中安装依赖,类似Poetry、PDM和Rye等工具,但性能更高。

工具管理:
通过uv tool installuv tool run(别名uvx),uv可以在隔离的虚拟环境中安装命令行工具,并无需显式安装即可执行一次性命令(如uvx ruff check),类似pipx但速度更快。

Python安装:
通过uv python install,uv可以自动下载安装Python,类似pyenv但更高效。

脚本执行:
uv支持基于PEP 723的内联元数据的单文件Python脚本。只需uv run即可执行独立的Python脚本。

以上所有功能都基于uv极快的跨平台依赖解析器。下图展示了在有无缓存的情况下,uv解析Transformers项目全部可选依赖的速度:
在这里插入图片描述

使用示例

下面通过一些示例代码展示uv的基本用法。

安装uv:

$ curl -LsSf https://astral.sh/uv/install.sh | sh
$ pip install uv 
$ pipx install uv

管理Python项目:

初始化项目并添加fastapi依赖:

$ uv init && uv add "fastapi>=0.112"

会生成如下pyproject.toml:

[project]
name = "hello-world"  
version = "0.1.0"
readme = "README.md"
dependencies = ["fastapi>=0.112"]

然后uv会基于项目依赖创建一个锁文件,保证项目环境在不同机器上的一致性。

通过uv run可以直接在项目环境中执行命令,无需手动激活虚拟环境

管理命令行工具:

通过uv tool install可以把命令行工具(如Ruff)安装到隔离的虚拟环境中,通过uvx可以直接执行命令而无需安装:

执行单文件脚本:

考虑如下main.py,它依赖requestsrich,但没有包含任何元数据:

import requests
from rich.pretty import pprint

resp = requests.get("https://peps.python.org/api/peps.json") 
data = resp.json()
pprint([(k, v["title"]) for k, v in data.items()][:10])

通过uv add可以自动将依赖声明嵌入到脚本中:

$ uv add --script main.py "requests<3" "rich"

然后通过uv run main.py即可在隔离环境中执行脚本并自动安装依赖

总结

uv是一个功能强大、简单易用的Python包管理工具,集成了端到端的解决方案。它在性能和可靠性上都有突出的优势。

无论是小型脚本还是大型项目,从初学者到专家,uv都能很好地满足Python开发的各种需求。Astral公司希望通过uv来降低Python开发的复杂度,提高生产力。

如果你在内部使用uv,并有兴趣在Python打包方面与Astral合作,欢迎联系他们,共同应对未来的挑战。


http://www.kler.cn/a/372885.html

相关文章:

  • 1Panel应用商店开源软件累计下载突破200万次!
  • .NET内网实战:通过白名单文件反序列化漏洞绕过UAC
  • Atlas800昇腾服务器(型号:3000)—SwinTransformer等NPU推理【图像分类】(九)
  • echarts 遍历多个图表,并添加resize缩放
  • AI基础:A*算法解八数码问题
  • 北京迅为iTOP-LS2K0500开发板快速使用编译环境虚拟机Ubuntu基础操作及设置
  • 游戏引擎中的颜色科学
  • 使用docx4j+docx4j-ImportXHTML实现将html转成word
  • PHP合成图片,生成海报图,poster-editor使用说明
  • 华为云Stack名词解释
  • 嵌入式硬件电子电路设计(一)开关电源Buck电路
  • es安装拼音分词后Kibana出现内存错误
  • HTML入门教程8:HTML格式化
  • 数据采集-Kepware OPCUA 服务器实现
  • 基于单片机的直流电机控制系统(论文+源码)
  • 智慧应急系统建设方案
  • 基于物联网设计的地下煤矿安全监测与预警
  • 【C++题解】1184. 数字走向I
  • JAVA学习-练习试用Java实现“计算两个数的和”
  • 《IDEA 使用技巧分享》
  • 一七二、Vue3性能优化方式
  • vue3uniapp实现自定义拱形底部导航栏,解决首次闪烁问题
  • mfc100.dll丢失的解决方法-电脑基础知识
  • uniapp的video视频属性打包app后层级过高
  • 【Java笔记】第十五章:IO流
  • (arxiv 2024)即插即用多尺度注意力聚合模块MSAA,即用即起飞