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
认为虚拟环境是必需的。