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

python包管理器uv踩坑

UV 包管理器踩坑

在 Python 的包管理生态中,已有如 pip、pip-tools、poetry、conda 等多种工具,各具特色和功能。

本文将介绍由 Astral 公司推出的包管理工具 uv,它采用 Rust 编写,目标是打造 “Python 版的 Cargo”。

uv 提供了高性能、兼容性强且易于使用的包管理体验,在安装速度、依赖解析和项目管理等方面表现出色,为 Python 开发者带来了全新的选择。

前排提示,对付这种比较新的package,在AI辅助写代码时最好打开其“联网搜索“功能
以下任何步骤如果卡壳,请先检查网络问题。尤其是使用curl 或者 wget 安装,最好提前配置好镜像或者配置好系统的科学代理。

和pip的区别,一些要点

  • uv和pip的缓存是相互独立的,即使使用了uv pip install 来替换 `pip install
  • uv自带python版本下载功能,因此无需pyenv等工具
  • uv可以接管和自动化虚拟化环境venv(因此可以无视)
  • uv有兼容pip等传统及其他包管理器的能力

初始化

首先去安装uv到电脑环境:

  • Linux wget -qO- https://astral.sh/uv/install.sh | sh
  • Windows powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

下载源配置

目前换源器如chsrc仅支持pipconda的换源,uv的镜像配置需要我们手动配置环境变量。具体如下

如果安装一些比较旧的包失败,可能是设定的默认源有问题(例如清华源就没有dataset==2.16.0这个版本)

  • Linux
echo 'export UV_DEFAULT_INDEX="https://pypi.tuna.tsinghua.edu.cn/simple"'>> ~/.bashrc
# 或使用阿里源
# echo 'export UV_DEFAULT_INDEX="https://mirrors.aliyun.com/pypi/simple/"' >> ~/.bashrc

执行完成使用bash或者source ~/.bashrc命令让配置 生效

  • Windows
    在当前的powershell环境输入
    $env:UV_DEFAULT_INDEX = "https://pypi.tuna.tsinghua.edu.cn/simple"
    或者直接去系统设置添加个新的环境变量:
    在这里插入图片描述

下包的优先级

uv检查包存在性的顺序如下:

  • 如果有设置为default区域的index--url 先在这里查找
  • 如果有设置为default区域的extra-index-url 再在这里查找
  • 在默认的index-url 系统级mirror源查找
  • 在备选的extra-index--url 系统级mirror源查找

注意:使用uv sync或者uv pip install附带--index-strategy unsafe-best-match
`参数(你也可以在pyproject里直接设置) 才能实现上述操作,否则默认只检查同区域设定的的源

如我卡死了torch-cu118的源地址为pytorch.org

[[tool.uv.index]]
name = "torch-cu118"
url = "https://download.pytorch.org/whl/cu118/"
explicit = true

如果uv在给定mirror源找不到包的时候就会失败。

自动处理包冲突和版本要求

uv可以自动处理冲突和版本兼容性,前提是:
(1)这个包在上游mirror存在(例如清华源就不存在dataset==2.16.0的版本,而阿里源则存在)
(2)这个包合当前python环境兼容

常用命令

完成源的配置后(写好pyproject.toml)只需要uv sync (或者新加包使用uv add)。
如果想兼容pip,也可以使用uv pip install命令,参数命令和单独使用pip的时候一致。

另外,平时在运行代码的时候可以直接使用 uv run main.py 这样的命令
如果想要运行python脚本时附带现在没有安装的包,则可使用uv run main.py --with numpy

例子:

[project]
name = "uv-playground"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11" # 如果找不到合适或者兼容的包,可以在这里降级
dependencies = ["torch>=2.6.0","torchaudio>=2.6.0","torchvision>=0.21.0","datasets==2.16.0","requests","rich>=14.1.0",
]
[tool.uv.sources]
torch = [{ index = "torch-cu118", marker = "sys_platform != 'linux'"},
][[tool.uv.index]]
url = "https://mirrors.aliyun.com/pypi/simple"
default = true # 给整个project设定的默认源[[tool.uv.index]]
name = "torch-cu118"
url = "https://download.pytorch.org/whl/cu118/"
explicit = true # 设置的url是这个包专有的[[tool.uv.index]]
name = "torchaudio-cu118"
url = "https://download.pytorch.org/whl/cu118/"
explicit = true[[tool.uv.index]]
name = "torchvision-cu118"
url = "https://download.pytorch.org/whl/cu118/"
explicit = true

参考

https://docs.astral.sh/uv/getting-started/installation/
https://zhuanlan.zhihu.com/p/1930714592423703026
https://blog.csdn.net/2301_80171004/article/details/146218153

http://www.dtcms.com/a/315130.html

相关文章:

  • Golang中的`io.Copy()`使用场景
  • Java 的 APT(Annotation Processing Tool)机制详解
  • 【MyBatis-Plus笔记】MyBatis-Plus详解
  • JuiceFS on Windows: 首个 Beta 版的探索与优化之路
  • 【多智能体cooragent】CoorAgent 系统中 5 个核心系统组件分析
  • 【笔记】ROS1|3 Turtlebot3汉堡Burger建SLAM地图并导航【旧文转载】
  • 数学 理论
  • 基于FAISS和Ollama的法律智能对话系统开发实录-【大模型应用班-第5课 RAG技术与应用学习笔记】
  • Fastapi文件上传那些事?
  • 浅谈 Python 中的 next() 函数 —— 迭代器的驱动引擎
  • MCP进阶:工业协议与AI智能体的融合革命
  • Neat Converter电子书格式转换工具,支持ePub、Azw3、Mobi、Doc、PDF、TXT相互转换,完全免费
  • 龙虎榜——20250804
  • numpy数组拼接 - np.concatenate
  • VPS云服务器Linux性能分析与瓶颈解决方案设计
  • java获取文件编码格式,然后读取此文件,适用于任何格式的文件。
  • 面试题:怎么理解3 次握手与 4 次挥手:TCP 连接的建立与终止
  • 【Unity3D】Shader圆形弧度裁剪
  • 思途Spring学习 0804
  • Unity 实现手机端和电脑项目在局域网内通信
  • 【推荐100个unity插件】Unity 的 Hot Reload 热重载实现,加快unity程序编译速度——FastScriptReload插件
  • MySQL InnoDB 表数据结构存储方式详解
  • pathspec ‘with_def_layout‘ did not match any file(s) known to git`
  • Vue 详情header组件
  • Go语言Context
  • ISO(感光度)的工作原理
  • 接口权限(@SaCheckPermission)
  • ebaz4205矿板以太网连接不稳定问题解决方案
  • SQL基础语法(四个分类、库和表的增删改)
  • 【笔记】ROS1|6 中间人攻击移动过程【旧文转载】