菜单

Python 安装

相关源文件

本文档介绍了 uv 的托管 Python 安装系统,包括 uv 如何下载 Python 发行版、管理安装元数据以及设置 Python 安装以供使用。该系统支持 uv python install 从预构建的分发版自动获取和安装 Python 版本。

有关发现现有 Python 安装的信息,请参阅 Python Discovery。有关通用的 Python 管理概念,请参阅 Python Management

安装架构概览

uv 的 Python 安装系统由几个关键组件组成,它们协同工作以提供自动化的 Python 发行版管理。

来源:crates/uv/src/commands/python/install.rs130-513 crates/uv-python/src/downloads.rs108-434 crates/uv-python/src/managed.rs95-141

下载元数据系统

安装系统依赖于描述所有可用 Python 发行版的全面元数据数据库。

元数据结构

下载元数据存储在 download-metadata.json 中,并包含来自 python-build-standalone 的 Python 发行版信息。

来源:crates/uv-python/fetch-download-metadata.py1-43 crates/uv-python/build.rs23-42 crates/uv-python/src/downloads.rs507-604

下载元数据加载

系统采用延迟加载元数据的方式。

组件目的实现
BUILTIN_PYTHON_DOWNLOADS_JSON嵌入的元数据字符串静态包含的最小化 JSON
PYTHON_DOWNLOADS运行时缓存OnceCell<Cow<'static, [ManagedPythonDownload]>>
ManagedPythonDownload::iter_all()元数据访问延迟初始化和迭代

来源:crates/uv-python/src/downloads.rs507-509 crates/uv-python/src/downloads.rs570-604

请求处理管道

安装过程通过几个阶段转换用户请求。

来源:crates/uv/src/commands/python/install.rs46-80 crates/uv-python/src/downloads.rs157-267 crates/uv-python/src/downloads.rs290-347

平台检测与筛选

系统自动检测当前平台并筛选可用的下载项。

平台组件检测方法筛选逻辑
架构Arch::from_env()ArchRequest::satisfied_by()
操作系统Os::from_env()直接相等检查
LibcLibc::from_env()直接相等检查
实现用户请求或默认 CPythonLenientImplementationName 匹配

来源:crates/uv-python/src/downloads.rs249-267 crates/uv-python/src/downloads.rs299-343

下载和安装过程

一旦确定了合适的下载项,系统便执行实际的安装。

下载执行

来源:crates/uv-python/src/downloads.rs623-671 crates/uv-python/src/downloads.rs673-839 crates/uv/src/commands/python/install.rs370-408

安装后配置

解压后,几个配置步骤可确保 Python 安装正常工作。

配置步骤目的实现
ensure_externally_managed()阻止 pip 修改创建 EXTERNALLY-MANAGED 文件
ensure_sysconfig_patched()修复路径配置修补 sysconfig 数据
ensure_canonical_executables()创建标准 Python 可执行文件链接/复制 python、python3 等。
ensure_dylib_patched()修复动态库路径(macOS)更新安装名称

来源:crates/uv-python/src/managed.rs501-590 crates/uv-python/src/managed.rs592-672 crates/uv-python/src/managed.rs674-738

托管安装组织

该系统将安装的 Python 版本组织在结构化的目录层次结构中。

安装目录结构

来源:crates/uv-python/src/managed.rs114-131 crates/uv-python/src/installation.rs220-284 crates/uv/src/commands/python/install.rs196-205

安装键格式

该系统使用结构化键来识别 Python 安装。

组件格式示例
实现cpythonpypygraalpycpython
版本major.minor.patch[prerelease]3.12.1
操作系统linuxdarwinwindowslinux
架构x86_64aarch64 等。x86_64
Libcgnumuslnonegnu

来源:crates/uv-python/src/installation.rs220-284 crates/uv-python/src/downloads.rs115-126

可执行文件管理

安装系统提供了多种使 Python 安装可访问的机制。

可执行文件链接策略

来源: crates/uv/src/commands/python/install.rs515-556 crates/uv-python/src/managed.rs381-480

系统会根据安装上下文创建不同类型的可执行链接

链接类型创建时间目标名称
特定版本始终(在预览模式下)python3.12
主版本号默认安装python3
通用默认安装python

来源: crates/uv/src/commands/python/install.rs530-539 crates/uv/src/commands/python/install.rs542-556

Windows 注册表集成

在 Windows 上,系统会选择性地将 Python 安装注册到注册表中

来源: crates/uv/src/commands/python/install.rs402-407 crates/uv-python/src/windows_registry.rs

并发和安全性

安装系统包含多种机制来安全地处理并发操作

安全机制目的实现
目录锁定防止并发修改LockedFile.lock 文件
原子操作确保安装一致性临时目录和重命名
去重避免重复下载基于唯一键的过滤
错误处理优雅的故障恢复全面的错误类型

来源: crates/uv-python/src/managed.rs109-112 crates/uv/src/commands/python/install.rs200 crates/uv/src/commands/python/install.rs303-306