本文档涵盖了 uv 的命令行界面架构,包括命令结构、参数解析、设置解析以及命令分发机制。有关特定命令实现及其业务逻辑的信息,请参阅 核心系统。
uv 的 CLI 使用 clap crate 构建,并遵循分层命令结构,其中包含适用于所有命令的全局选项和命令特定的选项。CLI 系统负责解析、验证、从多个源解析设置以及分发到相应的命令处理程序。
来源:crates/uv-cli/src/lib.rs77-95 crates/uv-cli/src/lib.rs366-516
uv 实现了一个分层命令结构,其中命令被组织到命名空间中。顶级命令定义在 Commands 枚举中,每个主要功能领域都有自己的子命令命名空间。
来源:crates/uv-cli/src/lib.rs366-516 crates/uv-cli/src/lib.rs791-938
命令解析由 clap 的 derive 宏处理,其中每个命令变体都包含其特定的参数结构。例如,ProjectCommand::Run(RunArgs) 包含了 uv run 命令的所有特定参数。
uv 从具有定义优先顺序的多个源解析设置。设置解析系统结合了命令行参数、环境变量和配置文件,为每个命令生成最终配置。
来源:crates/uv/src/settings.rs76-137 crates/uv/src/settings.rs163-199 crates/uv/src/settings.rs209-222
解析遵循以下优先级(从高到低):
uv 在一个集中的位置定义所有支持的环境变量,并在代码库中一致地使用它们。环境变量遵循 UV_ 前缀约定,并且通常镜像 CLI 参数名称。
来源:crates/uv-static/src/env_vars.rs19-315
主应用程序入口点负责命令解析、设置解析,并将控制权分发给特定的命令实现。分发系统集中在主 run() 函数中。
来源:crates/uv/src/lib.rs60-184 crates/uv/src/lib.rs426-537
分发系统使用对 Commands 枚举进行模式匹配,以路由到相应的命令处理程序。每个命令处理程序接收解析后的参数和解析后的设置作为参数。
全局选项定义在 GlobalArgs 和 TopLevelArgs 中,并且可用于所有命令。这些选项控制跨领域关注点,例如日志记录、缓存、网络和 Python 发现。
| 选项类别 | 示例 | 目的 |
|---|---|---|
| 输出控制 | --quiet、--verbose、--color | 控制日志记录和输出格式 |
| 缓存 | --cache-dir、--no-cache | 控制缓存行为 |
| 网络 | --offline、--native-tls、--allow-insecure-host | 网络和安全设置 |
| Python 发现 | --managed-python、--no-python-downloads | Python 解释器选择 |
| 配置 | --config-file、--no-config、--project | 配置文件发现 |
来源:crates/uv-cli/src/lib.rs134-324
uv 实现了一个自定义的帮助系统,该系统通过分页支持和增强的格式扩展了 clap 的内置帮助。帮助系统可以显示嵌套命令的帮助,并自动发现可用的子命令。
来源:crates/uv/src/commands/help.rs21-102 crates/uv/src/commands/help.rs224-256
帮助系统支持:
uv help tool install)