uv 使用介绍

date
May 5, 2024
slug
uv_introduction
status
Published
tags
Python
summary
type
Post

uv 使用介绍

0 uv 是什么

uv 是一个极快的 Python 软件包安装程序和解析器,用 Rust 编写。设计目标是作为常见的 pippip-tools 工作流程的即插即用替代品。
下图展示了不同的 Python 包管理工具使用热缓存安装 Trio 依赖项的速度对比图。
不同的Python包管理工具使用热缓存安装Trio依赖项

1 uv 的缺陷是什么

虽然 uv 支持 pip 接口的大部分功能,但并不支持全部特性。在某些情况下,这些差异是有意为之;在其他情况下,则是由于 uv 开发早期阶段的结果。详情参考 pip 兼容性指南
pip-compile 类似,uv 生成特定平台的 requirements.txt 文件(不同于例如 poetrypdm 生成平台无关的 poetry.lockpdm.lock 文件)。因此,uvrequirements.txt 文件可能无法跨平台和 Python 版本进行移植。

2 uv 的高阶使用说明

2.1 uv 如何发现 Python 解释器

uv 本身不依赖于 Python,但它需要定位 Python 环境将依赖项安装到环境中,同时构建源分发。

2.1.1 pip sync 或 pip install 的路径搜索

当运行 pip sync 或 pip install 时,uv 将按以下顺序搜索虚拟环境:
  • 基于 VIRTUAL_ENV 环境变量激活的虚拟环境
  • 基于 CONDA_PREFIX 环境变量激活的 Conda 环境
  • 在当前目录的 .venv 处或最近的父目录中的虚拟环境
  • 若未找到虚拟环境,uv 将通过 uv venv 提示用户在当前目录中创建一个。

2.1.2 pip compile 的路径搜索

运行 pip compile 时,uv 不需要虚拟环境,并将按以下顺序搜索 Python 解释器:
  • 基于 VIRTUAL_ENV 环境变量的已激活的虚拟环境
  • 基于 CONDA_PREFIX 环境变量的已激活的 Conda 环境
  • 当前目录中位于 .venv 处的虚拟环境,或者位于最近父目录中的虚拟环境
  • 在 macOS 和 Linux 上可用的 Python 解释器为 python3 ,在 Windows 上为 python.exe 。
若提供了 --python-version 给 pip compile (如 --python-version=3.7 ),uv 将按照以下顺序搜索与该版本匹配的 Python 解释器:
  • 基于 VIRTUAL_ENV 环境变量的已激活虚拟环境
  • 基于 CONDA_PREFIX 环境变量激活的 Conda 环境
  • 当前目录中位于 .venv 处的虚拟环境,或者位于最近父目录中的虚拟环境
  • 在 macOS 和 Linux 上可用的 Python 解释器,例如 python3.7 。
  • 在 macOS 和 Linux 上可用的 Python 解释器为 python3 ,在 Windows 上为 python.exe 
  • 在 Windows 上,由 py --list-paths 返回的 Python 解释器与请求的版本匹配。

2.2 将 uv 安装到任意 Python 环境

由于 uv 不依赖于 Python,因此它可以安装到其它虚拟环境中。例如,设置 VIRTUAL_ENV=/path/to/venv 会使 uv 安装到 /path/to/venv ,无论此时 uv安装在何处。
uv 还可以通过向 uv pip sync 或 uv pip install 提供 --python 参数来安装到任意的、甚至非虚拟环境中。例如, uv pip install --python=/path/to/python 将安装到与 /path/to/python 解释器关联的环境中。
为了方便起见, uv pip install --system 将安装到系统 Python 环境中,作为对例如 uv pip install --python=$(which python3) 的近似简写。尽管通常建议使用虚拟环境进行依赖管理, --system 旨在使 uv 能够在持续集成和容器化环境中使用。
在各个平台和发行版中安装到系统 Python 通常很困难。uv 支持常见情况,但并非所有情况都适用。例如,在 Debian 的 Python 3.10 之前的版本中,由于该发行版对 distutils 进行了补丁,因此不支持安装到系统 Python(但不支持 sysconfig )。虽然 uv 开发团队始终建议使用虚拟环境,但在这些非标准环境中,uv 认为虚拟环境是必需的。

© Mrzz 2022 - 2025