Skip to content

依赖与 CI 迁移:uv 单环境统一部署(pyproject + uv.lock)+ 跨平台 CI #44

Description

@Mieluoxxx

背景与问题

当前依赖生命周期是「pip requirements 文件族 + 双 venv 环境线」:

  • 声明侧:requirements.txt / requirements-dev.txt / requirements-cu124.txt / requirements/locks/* 四处并存,锁由自研脚本 tools/generate_python_locks.py 生成;
  • 环境侧:.venv(core/dev)与 .venv_cu124(本地 CUDA 语音栈)双环境并行,Electron 探测、启动器(run_electron_cu124.bat)、ASR sidecar、llama server 都要维护多候选路径;
  • CI 侧:仅 Windows 一条 pip 流(setup-python cache + pip install -r),macOS 完全没有 CI。

痛点:声明漂移面大、双 venv 收敛成本高、锁生成器是自研维护负担、macOS 回归(如 PyAudio 源码编译)无门禁。

目标

收敛为 pyproject.toml 唯一声明 + uv.lock 唯一锁 + 单一 .venv 逐层 L1→L4,并把 Windows CI 从 pip 流重构为 uv 流、新增 macOS CI。不再存在 .venv_cu124 第二环境:L4 是同一 .venv 上追加 local-cu124 extra 后的状态。

平台支持边界

  • L1 core / L2 voice:Windows 与 macOS 通用。
  • L3 vad / L4 local-cu124:目前仅支持 Windows + NVIDIA 平台——官方验证、锁文件与安装基线都在 Windows 11 + CUDA 12.4,其中 L4 依赖 NVIDIA CUDA 12.4 构建(torch==2.5.1+cu124)。
  • AMD ROCm 及其他 GPU 平台:无官方支持(不提供锁文件、验证器与安装基线)。

安装合同(Windows / macOS 共用;L3/L4 仅支持 Windows + NVIDIA)

uv venv .venv --python 3.12
uv sync --locked                                                    # L1 core
uv sync --locked --extra voice                                      # L2 voice
uv sync --locked --extra voice --extra vad                          # L3 vad(仅 Windows + NVIDIA)
uv sync --locked --extra voice --extra vad --extra local-cu124      # L4(仅 Windows + NVIDIA)
  • uv sync 为 exact 同步,升梯必须带齐下层 extras(前缀递增);
  • torch/torchaudio 经 [tool.uv.sources] 仅在 Windows + local-cu124 时路由到 PyTorch cu124 index;vadtorch==2.5.1,L3→L4 是同版本 wheel 换源而非版本跳变;
  • uv.lock 含 win32 平台分叉(torch 2.5.1 / 2.5.1+cu124 双条目),macOS 分支不含 cu124。

范围摘要

  1. 删除 requirements 全族与 generate_python_locks.pyuv.lock 入库
  2. Windows CI 重构为 uv 流 + 新增 single-venv-ladder job(L1→L4 单环境、torch +cu124 断言、负向检查无第二 venv)
  3. 新增 macOS CI(L1+L2 voice:brew portaudio + PyAudio 源码编译 + verify + ruff + 平台安全契约测试 + electron build)
  4. 工具迁移:verify_python_environment 拆门(cpu/ci/voice 跨平台、vad/cu124 Windows-only fail-closed);audit_cu124_dependencies 声明侧改读 pyproject;verify_clean_python_install.ps1 改 uv
  5. 测试契约迁移:profile-contract / cu124-audit 改测 pyproject extras、tool.uv.sources 路由、uv.lock 平台条目
  6. 运行时与文档收敛:Electron venv 探测 [.venv];删除 run_electron_cu124.bat;asr/llm 运行时第二 venv 引用清零;README / CONTRIBUTING / release policy / README_EN 命令链 uv 化

验收标准

  • C1 声明/锁收敛:requirements 文件族与锁生成器删除,全仓残留仅白名单(CI 负向断言、audit observed 快照名、测试 fixture 字符串、vendored 第三方文档)
  • C2 单环境逐层(macOS 实测):干净 venv L1→L2→L3 通过;--profile cpu/voice 过、--profile vad fail-closed
  • C3 Windows 侧:uv 流 CI + ladder job 全绿(GitHub Windows runner)
  • C4 macOS CI 真跑全绿
  • C5 测试契约迁移完成且本地全绿
  • C6 工具退役/迁移完成
  • C7 文档与启动器收敛完成

当前状态

本地(macOS M4)已全绿:干净 venv 逐层 sync+import、uv lock --check、契约测试 26+50、ruff、electron tsc+build、macOS CI 本地等价复刻。C3/C4 待 GitHub runner 真跑确认;实现 PR 见关联。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions