Files
cmautobuy/docs/task/92-client-windows打包与发布清单基础.md

3.9 KiB
Raw Permalink Blame History

92 Client:建立 Windows 打包与发布清单基础

  • 类型:需求
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 / Client 可运行任务闭环(MVP)
  • 状态:已完成,用户验收通过
  • 日期:2026-08-10
  • Gitea 工单:#92

背景与目标

Client 原来只能从源码运行,没有可重复执行的 Windows 打包脚本、统一版本来源和 可校验的发布清单。本任务建立 one-dir 便携发布基础,并保证更新程序文件时不会 覆盖根目录 data/。

最终方案

  • 使用 Python 3.10、PyQt5 和 PyInstaller 6.21.0 构建。
  • 根目录 Launcher.exe 只启动 app/CMAutoBuy.exe,不联网、不下载、不更新文件。
  • 主程序使用 PyInstaller one-dir,依赖放在 app/dependencies/。
  • SQLite 等可写数据始终放在根目录 data/,更新包只包含 app/。
  • 构建生成完整便携包、更新包和 autobuy——manifest.json;清单保存版本、文件名、 字节大小和 SHA256。
  • 原计划把 Python 辅助代码放进 client/packaging,实际发现会遮蔽 PyInstaller 依赖的第三方 packaging 包,因此 PowerShell 脚本保留在 packaging/,Python 辅助代码改放 build_tools/。

改了哪些

  • .gitignore:忽略独立打包环境和发布产物。
  • client/build_client.bat:增加可双击的简单构建入口。
  • client/packaging/build.ps1:安装固定依赖、打包、检查关键资源并组装发布物。
  • client/packaging/requirements-build.txt:固定 PyInstaller 6.21.0。
  • client/build_tools/launcher.py:实现只负责启动主程序的轻量启动器。
  • client/build_tools/release_manifest.py:生成发布清单和 SHA256。
  • client/src/version.py:增加单一软件版本来源,初始版本为 0.1.0。
  • client/src/db.py:打包后把数据目录解析到 Launcher.exe 同级的 data/。
  • client/test/test_packaging.py:覆盖启动路径、数据目录和清单校验。
  • docs/client/:同步更新上手、打包目录、数据路径和发布门禁。

验收结果

验收标准 结果
client/build_client.bat 完整构建并正确返回结果 通过
生成 Launcher.exe + app/ + data/ one-dir 便携目录 通过
生成完整便携包和不含 data/ 的更新包 通过
清单精确命名为 autobuy——manifest.json 通过
清单版本、文件名、大小和 SHA256 与压缩包一致 通过
打包程序把数据库写到根目录 data/client.db 通过
Qt 平台插件、Fluent 资源和 adbutils/binaries/adb.exe 已收集 通过
未新增联网更新、凭据落盘或真实下单行为 通过

测试

  • 执行的命令:
    • C:/Python310/python.exe -m py_compile buyer_main.py src/version.py src/db.py build_tools/launcher.py build_tools/release_manifest.py test/test_packaging.py
    • $env:QT_QPA_PLATFORM='offscreen'; C:/Python310/python.exe -m pytest test -q
    • client/build_client.bat
    • 使用 Python hashlib 和 zipfile 校验清单、压缩包内容及更新包不含 data/。
    • 解压完整便携包,以 QT_QPA_PLATFORM=offscreen 启动 Launcher.exe,检查主程序 进程和数据库实际位置。
  • 结果:Client 全量测试 239 passed;完整构建成功;发布清单校验成功;打包主程序 启动成功;数据库生成在根目录 data/client.db,没有生成 app/data/client.db。
  • 没验证到的部分:尚未在另一台完全未安装 Python 的 Windows 机器上验证;尚未 验证杀毒软件误报和代码签名;尚未用打包产物连接真实 USB/Wi-Fi Android 设备; PyInstaller 的发布许可仍需项目负责人按发布门禁最终确认。

遗留问题

  • 联网检查、下载、安全解压、签名验证和下次启动替换 app/ 不属于本任务,需要 单独创建更新功能工单。

相关提交

  • 99252ae 增加 Client Windows 打包基础