/ Technical / 3浏览

Python全能依赖环境管理工具uv

在现在AI开发的时代中,python语言逐渐成为主流,但是现在除了公司团队,很少有个人会对python做依赖管理。这就会导致许多人一旦切换环境或者升级版本,很有可能导致原始的项目失效,难以复现。因此,摆脱pip、conda工具,使用uv工具对python的依赖包进行更加细致地管理显得十分重要

1. 为什么要用uv工具,pip直接安装不好吗?

  • 无论是作为一位科研人员还是开发工作者,都习惯原生的pip管理工具,但是由于该工具仅仅对依赖链做版本管理,并不具有整个依赖声明周期的管理功能,换句话说,只是支持“同时安装”,并不支持“同时卸载”,因此可能导致以下问题:

    • 在依赖安装的同时,会将其他依赖一并安装,在卸载时只会卸载该依赖,其他剩余依赖会残留,导致后续安装某些包时会存在版本冲突

    • 依赖冲突无法解决,在大部分时候,pip安装时并不擅长解决各种不同依赖之前包的冲突问题,容易导致冲突报错

    • 环境无记录性,由于只会根据官方pip仓库进行最新依赖包的安装,因此并没有记录当时安装的版本,导致后续执行相同命令安装时,无法感知版本,导致依赖冲突或者不同环境的开发问题

2. uv依赖管理工具概述

  • 官方安装说明:

https://docs.astral.sh/uv/getting-started/installation/

2.1 为什么要使用uv做依赖管理

使用uv进行依赖管理有以下:

  • 可维护性:可以对整个python工程的依赖后续升级和维护进行全声明周期管理

  • 可复现性:由于对环境依赖进行了严格的版本记录,因此可以随时复现当时开发环境

  • 平台无关性:可以在配置中严格定义各种不同环境的定义,一行命令即可适配各种平台开发环境

  • 无残留性:所有的依赖包是作为一个整体,依赖时同时保留,卸载时,全部卸载无残留

  • 极速性:由于uv使用rust改写的依赖管理,在安装依赖检查环境问题时会极快

2.2 uv管理工具常用命令

  • uv init -p python3.10 快速基于当前目录创建项目,并锁定python3.10为版本

  • uv venv -p python3.10 快速创建一个基于uv管理的虚拟环境,并锁定python3.10为版本

  • uv sync 立即根据当前目录下的pyproject.toml 文件对python进行依赖同步或者更新

  • uv add <package_name> 快速对python环境安装依赖

3. 其他配置说明

3.1 镜像加速配置

  • 通过修改项目下的pyproject.toml文件,即可快速添加镜像加速地址

[[tool.uv.index]]
# 使用华为云或者清华镜像作为加速地址
url = "https://repo.huaweicloud.com/repository/pypi/simple"
#url = "https://pypi.tuna.tsinghua.edu.cn/simple"
default = true

3.2 Pytorch镜像管理

  • 由于Pytorch对于不同环境和GPU有着不同的规定,因此需要参考以下步骤配置pytorch环境以实现不同平台和环境自动设置

  1. 首先执行 uv add torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126 ,此时会自动将torch等依赖版本添加到pyproject.toml文件中

  2. 然后在配置中添加以下配置:

[tool.uv.sources]
torch = [
    { index = "pytorch-cu128", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }
]
torchaudio = [
    { index = "pytorch-cu128", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }
]
torchvision = [
    { index = "pytorch-cu128", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }
]

[[tool.uv.index]]
name = "pytorch-cu128"
url = "https://download.pytorch.org/whl/cu128"
explicit = true
  1. 最后执行:uv sync 自动完成cuda对应的pytorch安装,后续无需配置

达达下雨不吃鱼
基于H2O的AutoML机器学习详细说明
Glusterfs——开源分布式存储
FRP——网络代理服务
声音大模型之音色克隆
深度学习机大模型领域相关术语及解释
Mysql慢查询优化