本文档描述了 uv 的配置解析系统,该系统确定了如何从多个来源(包括命令行参数、环境变量和配置文件)组合设置。该系统在不同的调用上下文中确保了一致的行为,同时提供了灵活的配置选项。
有关特定配置设置及其含义的信息,请参阅 configuration reference 对于 CLI 命令结构的信息,请参阅 Command Structure。
uv 通过一个分层系统解析配置,该系统按优先顺序组合来自多个来源的设置
pyproject.toml, 项目目录中的 uv.toml)~/.config/uv/uv.toml)/etc/uv/uv.toml)此解析在 uv 执行生命周期的早期进行,在执行任何操作之前,确保所有命令都以一致的配置运行。
配置源层次结构
来源:crates/uv/src/lib.rs122-156
CLI 参数使用 clap 框架进行解析,并结构化为在 TopLevelArgs 和 GlobalArgs 中定义的层级参数组。
CLI 参数结构
主要的 CLI 参数容器包括
TopLevelArgs:全局选项,例如 --config-file、--no-configGlobalArgs:影响所有操作的设置,例如 --offline、--verboseCacheArgs:缓存相关设置,例如 --cache-dir、--no-cache来源:crates/uv-cli/src/lib.rs97-132 crates/uv-cli/src/lib.rs134-324
环境变量在 EnvVars 中定义,并遵循一致的 UV_* 命名模式。每个变量对应一个等效的 CLI 参数。
主要环境变量包括:
UV_CONFIG_FILE:配置文件的路径UV_NO_CONFIG:禁用配置文件发现UV_CACHE_DIR:缓存目录位置UV_OFFLINE:启用离线模式UV_PYTHON_PREFERENCE:Python 发现偏好来源:crates/uv-static/src/env_vars.rs1-300
配置文件使用 TOML 格式,并通过文件系统遍历进行发现。该系统支持两种文件类型:
uv.toml:专用的 uv 配置文件pyproject.toml:包含 [tool.uv] 部分的项目文件配置文件发现
配置发现过程在 FilesystemOptions::find() 中实现,并从当前工作目录向上遍历目录树,直到找到配置文件。
来源:crates/uv/src/lib.rs144-156 crates/uv-settings/src/settings.rs25-151
设置解析遵循一个多阶段过程,使用 Combine trait 组合所有配置源。
设置解析流程
Combine trait 定义了如何合并来自不同来源的设置
组合逻辑遵循 Cargo 的优先级规则
来源:crates/uv-settings/src/combine.rs21-35
FilesystemOptions 封装了配置加载,并提供了组合多个配置源的方法
来源:crates/uv-settings/src/settings.rs153-171
解析后的配置被组织成专门的设置结构,这些结构对应于不同的操作领域。
设置结构层次
GlobalSettings 包含适用于所有 uv 操作的设置
来源:crates/uv/src/settings.rs56-138
CacheSettings 管理缓存行为
来源:crates/uv/src/settings.rs201-222
每种命令类型都有专门的设置结构
RunSettings:用于 uv run 命令执行InitSettings:用于 uv init 项目创建ToolRunSettings:用于 uv tool run 操作PipCompileSettings:用于 uv pip compile 操作这些结构将全局设置与特定于命令的配置选项相结合。
来源:crates/uv/src/settings.rs224-306 crates/uv/src/settings.rs456-586
解析系统通过 Combine trait 的实现执行严格的优先级排序。对于每种设置类型:
.or() 来偏好第一个 Some 值来源:crates/uv-settings/src/combine.rs109-121
配置文件通过多步过程加载
Options 结构该系统同时处理专用的 uv.toml 文件和 pyproject.toml 文件中的 [tool.uv] 部分。
来源:crates/uv/src/lib.rs129-156
uv 提供了一个 --show-settings 标志用于调试配置解析。此标志会输出最终解析后的设置结构,有助于理解不同配置来源是如何组合的。