菜单

Python 管理

相关源文件

uv 中的 Python 管理提供了一个用于发现、安装和管理 Python 解释器的全面系统。该系统使 uv 能够在不同机器和平台之间提供一致的 Python 环境,确保可重现的构建和开发工作流程。

本页面概述了 uv 的 Python 管理功能。有关查找 Python 解释器的详细信息,请参阅 Python Discovery。有关安装 Python 版本的信息,请参阅 Python Installation

系统架构

uv 的 Python 管理系统包含三个主要组件,它们协同工作以提供无缝的 Python 解释器管理。

Python 管理系统架构

该系统处理三个主要工作流程:

  1. 发现:使用 find_python_installations 来定位现有的 Python 解释器。
  2. 安装:使用 ManagedPythonDownload 来获取和安装新的 Python 版本。
  3. 管理:使用 ManagedPythonInstallations 来组织和访问已安装的版本。

来源: crates/uv-python/src/lib.rs7-11 crates/uv-python/src/discovery.rs884-890 crates/uv-python/src/installation.rs22-29 crates/uv-python/src/managed.rs95-101

Python 发现概述

Python 发现通过 `find_python_installations` 函数实现,该函数根据用户偏好在多个 PythonSource 位置进行搜索。发现系统使用可配置的优先级顺序来定位 Python 解释器。

Python 源优先级和流程

发现系统由两个关键枚举进行配置:

  • PythonPreference:控制托管 Python 安装与系统 Python 安装之间的偏好。
  • EnvironmentPreference:控制虚拟环境与系统环境之间的偏好。

有关详细的发现机制,请参阅 Python Discovery

来源: crates/uv-python/src/discovery.rs884-895 crates/uv-python/src/discovery.rs185-210 crates/uv-python/src/discovery.rs70-89 crates/uv-python/src/discovery.rs129-141

Python 安装概述

Python 安装通过下载和托管安装系统进行管理。该过程将 PythonRequest 实例转换为 PythonDownloadRequest 对象,该对象可以定位和获取适当的 Python 分发版。

Python 安装数据流

安装系统支持通过 `PythonDownloads` 枚举控制的自动 Python 下载。当 `PythonInstallation::find_or_download` 无法找到请求的 Python 版本时,它可以自动获取并安装它。

有关详细的安装机制,请参阅 Python Installation

来源: crates/uv-python/src/downloads.rs115-127 crates/uv-python/src/downloads.rs218-244 crates/uv-python/src/installation.rs78-141 crates/uv/src/commands/python/install.rs35-44

托管 Python 目录结构

“ManagedPythonInstallations”系统使用 `PythonInstallationKey` 标识符来组织已下载的 Python 安装。每个安装都存储在一个以其唯一密钥命名的目录中。

托管安装组织

托管系统的关键组件:

  • PythonInstallationKey:唯一标识符,格式为 `implementation-version-os-arch-libc`。
  • ManagedPythonInstallations::find_all():发现所有已安装的版本。
  • ManagedPythonInstallation::ensure_externally_managed():应用安装补丁。
  • create_bin_link():为 Python 安装创建可执行链接。

来源: crates/uv-python/src/managed.rs119-132 crates/uv-python/src/installation.rs275-298 crates/uv-python/src/managed.rs188-234

请求系统

Python 管理系统使用结构化的请求系统来指定所需的 Python 解释器。`PythonRequest` 枚举提供了多种标识 Python 安装的方法。

请求类型层级

请求类型支持不同的发现策略:

  • File / Directory:直接路径指定。
  • Version / ImplementationVersion:基于版本的匹配。
  • ExecutableName:基于 PATH 的可执行文件查找。
  • Key:直接的安装密钥匹配。

来源: crates/uv-python/src/discovery.rs43-68 crates/uv-python/src/discovery.rs155-168 crates/uv-python/src/downloads.rs115-127 crates/uv-python/src/downloads.rs218-244

CLI 命令集成

Python 管理系统提供了几个与核心发现和安装系统交互的 CLI 命令。

CLI 命令流程

关键命令实现:

  • python install:使用 `InstallRequest` 来管理下载和安装工作流。
  • python list:结合了 `find_python_installations` 和 `PythonDownloadRequest::iter_downloads`。
  • python find:使用 `find_python_installation` 进行单结果发现。
  • python uninstall:结合 `ManagedPythonInstallations::find_all` 和过滤。

来源: crates/uv/src/commands/python/install.rs35-44 crates/uv/src/commands/python/list.rs54-67 crates/uv/src/commands/python/uninstall.rs67-89

预览模式功能

某些 Python 管理功能可在预览模式下使用,可通过 --preview 标志启用

  1. Python 可执行文件链接:使用 --preview 安装 Python 时,uv 会在 bin 目录中创建指向 Python 可执行文件的符号链接,该目录可添加到您的 PATH 中。

  2. 默认 Python:使用 --preview --default,您可以将某个 Python 版本设置为默认版本,从而为 pythonpython3 等创建链接。

来源: crates/uv/src/commands/python/install.rs348-373 crates/uv/src/commands/python/install.rs518-687

自动安装 Python

uv 可以在系统找不到 Python 版本时自动安装它们。此行为受 python-downloads 设置的控制。

当请求的 Python 版本未找到时,uv 将:

  1. 检查是否启用了自动下载
  2. 检查 Python 版本是否可下载
  3. 下载并安装 Python 版本
  4. 使用新安装的 Python 版本

这为用户提供了无缝的体验,确保始终可以使用正确的 Python 版本。

来源: crates/uv-python/src/installation.rs80-139 crates/uv/tests/it/python_install.rs182-252