uv 使用介绍
date
May 5, 2024
slug
uv_introduction
status
Published
tags
Python
summary
type
Post
uv 使用介绍
0 uv 是什么
uv 是一个极快的 Python 软件包安装程序和解析器,用 Rust 编写。设计目标是作为常见的 pip 和 pip-tools 工作流程的即插即用替代品。下图展示了不同的 Python 包管理工具使用热缓存安装 Trio 依赖项的速度对比图。
1 uv 的缺陷是什么
与
pip-compile 类似,uv 生成特定平台的 requirements.txt 文件(不同于例如 poetry 和 pdm 生成平台无关的 poetry.lock 和 pdm.lock 文件)。因此,uv 的 requirements.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 认为虚拟环境是必需的。