菜单

核心系统

相关源文件

本文档概述了 uv 为 Python 包管理提供支持的三个核心内部系统:依赖解析、包管理和缓存。这些系统协同工作,解析复杂的依赖图,从各种来源获取和构建包,并高效地缓存结果以提高性能。

有关命令行界面和面向用户的命令的信息,请参阅 命令行界面。有关项目特定操作的详细信息,请参阅 项目管理

系统架构概览

uv 的核心围绕三个相互关联的系统构建,这些系统处理 Python 包管理的复杂性。

核心系统组件

来源:crates/uv-resolver/src/resolver/mod.rs101-104 crates/uv-distribution/src/distribution_database.rs50-55 crates/uv-client/src/registry_client.rs217-236 crates/uv-cache/src/lib.rs137-149

系统交互和数据流

在包解析和安装期间,三个核心系统通过明确定义的接口进行交互。

解析和安装流程

来源:crates/uv-resolver/src/resolver/mod.rs275-307 crates/uv-client/src/registry_client.rs306-425 crates/uv-distribution/src/distribution_database.rs111-122 crates/uv-distribution/src/source/mod.rs106-253

依赖解析系统

依赖解析系统围绕 PubGrub 算法构建,并通过几个关键组件实现。

核心解析组件

组件目的关键方法
Resolver<Provider>主要的解析协调器resolve(), solve()
PubGrubPackagePubGrub 中的包表示from_package(), name()
PubGrubDependency依赖约束from_requirement()
DefaultResolverProvider包元数据提供程序get_package_versions(), get_dependencies()

解析器使用状态机方法,其中 ResolverState 维护当前的解析上下文,而 ForkState 处理用于通用解析的环境特定解析分支。

来源:crates/uv-resolver/src/resolver/mod.rs101-258 crates/uv-resolver/src/pubgrub/package.rs10-33 crates/uv-resolver/src/pubgrub/dependencies.rs17-26

包管理系统

包管理系统负责获取、构建和准备用于安装的包。

分发数据库架构

DistributionDatabase 作为中央协调器,使用 SourceDistributionBuilder 从源构建,并使用 ManagedClient 进行带并发控制的网络操作。

来源:crates/uv-distribution/src/distribution_database.rs50-88 crates/uv-distribution/src/source/mod.rs60-104 crates/uv-client/src/registry_client.rs217-236

缓存系统

缓存系统提供跨 uv 操作的持久存储,并组织成逻辑桶。

缓存桶组织

存储桶目的内容
CacheBucket::SimpleSimple API 的包元数据PackageName.rkyv 文件
CacheBucket::Wheels预构建的 wheel 分发包提取的 wheel 目录
CacheBucket::SourceDistributions从源构建的 wheel 包源存档和构建的 wheel 包
CacheBucket::Archive内容寻址存储wheel 的符号链接目标
CacheBucket::Environments虚拟环境临时 Python 环境

缓存条目管理

缓存使用 CacheShard 来组织相关条目,并使用 CacheEntry 来管理单个缓存项,支持原子操作和垃圾回收。

来源:crates/uv-cache/src/lib.rs137-216 crates/uv-cache/src/lib.rs39-87 crates/uv-cache/src/lib.rs95-135

系统集成点

三个核心系统通过几个关键接口进行集成。

请求处理管道

解析器通过分发数据库驱动包获取,该数据库与注册表客户端和缓存系统进行协调。BatchPrefetcher 通过预取可能需要的包元数据来优化网络请求,而 InMemoryIndex 提供对包版本信息的快速访问。

缓存系统通过智能缓存键生成以及使用时间戳和内容哈希进行新鲜度验证,确保了源构建和网络请求等耗时操作的最小化。

来源:crates/uv-resolver/src/resolver/batch_prefetch.rs45-80 crates/uv-resolver/src/resolver/index.rs crates/uv-cache/src/lib.rs244-284