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

Closed
opened 2026-08-10 11:40:09 +08:00 by ila · 4 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 / Client 可运行任务闭环(MVP)
  • 阶段:集成、打包和验收

要解决什么

Client 目前只能从源码启动,没有可重复执行的 Windows 打包脚本、统一版本来源和可校验的发布清单,无法在未安装 Python 的 Windows 环境交付或验证升级时保留 data/。

做什么 / 不做什么

  • 做:
    • 使用 Python 3.10、PyQt5 和 PyInstaller 6.x 的 one-dir 模式生成便携目录。
    • 建立清晰的程序版本来源、初级程序员可双击的 client/build_client.bat 和实际构建脚本。
    • 发布目录保持程序文件与根目录 data/ 分离,更新程序文件时不覆盖用户数据。
    • 收集 PyQt5、PyQt-Fluent-Widgets、uiautomator2、adbutils/ADB 所需资源。
    • 生成完整便携压缩包、更新压缩包以及包含版本、文件名、大小和 SHA256 的 autobuy——manifest.json。
    • 增加可在开发环境运行的版本、目录与清单测试。
  • 不做:
    • 不实现联网检查、下载、强制更新或自动替换程序。
    • 不保存更新服务器账号、密码、Token 或 Cookie。
    • 不改变采购流程,不启用真实下单。
    • 不引入 PyQt6、PySide2 或 PySide6。

怎么做

  • 新增 client/src/version.py 作为单一版本来源。
  • 新增 client/build_client.bat 作为简单入口,并把复杂步骤放入 client/packaging/build.ps1。
  • 新增独立的构建依赖文件,固定兼容 Python 3.10 的 PyInstaller 6.x 版本,不污染运行依赖说明。
  • 使用 PyInstaller one-dir 生成主程序,组装 Launcher.exe + app/ + data/ 兼容的便携目录;data/ 只创建空目录,不进入更新压缩包。
  • 修正打包模式下的根目录解析,确保 SQLite 始终位于发布根目录 data/。
  • 构建脚本生成发布压缩包和 autobuy——manifest.json,并用测试校验文件名、版本、大小与 SHA256。
  • 修改范围预计包括 client/src/version.py、client/src/db.py、client/buyer_main.py、client/build_client.bat、client/packaging/、client/test/、.gitignore 及必要的 Client 基线文档。

验收标准

  • 双击 client/build_client.bat 可以执行完整构建,失败时返回非零退出码并保留可读错误。
  • 构建结果为 one-dir 便携目录,入口、程序依赖和根目录 data/ 分离。
  • 发布目录生成完整便携压缩包和不包含 data/ 的更新压缩包。
  • release 中生成的清单文件名精确为 autobuy——manifest.json。
  • 清单包含版本、更新包文件名、字节大小和 SHA256,且与实际更新包一致。
  • 打包模式下数据库路径指向发布根目录 data/client.db,更新 app/ 不会覆盖数据库。
  • PyQt5、PyQt-Fluent-Widgets、uiautomator2 和 adbutils/ADB 的打包收集规则已写入脚本并可检查。
  • 真实下单开关仍默认关闭,未新增任何自动付款、风控绕过或凭据落盘行为。
  • 自动测试通过;未完成的无 Python 干净 Windows、杀软和真机 ADB 验证明确记录。

怎么验证

从仓库根目录执行:

C:/Python310/python.exe -m pytest client/test -q
C:/Python310/python.exe -m py_compile client/buyer_main.py client/src/version.py client/src/db.py
client/build_client.bat

构建后校验 client/release/autobuy——manifest.json、压缩包哈希和目录结构;另需在未安装 Python 的 Windows 环境及真实 USB/Wi-Fi Android 设备上人工验证。

风险和回退

  • PyInstaller 收集规则可能遗漏 Qt 插件、Fluent 资源或 ADB 二进制;构建脚本应在缺少关键文件时直接失败,不发布不完整产物。
  • 数据目录解析错误会造成数据库放进可替换目录;通过独立路径测试和发布目录检查防止回归。
  • 本任务不触碰数据库结构;如需回退,可整体撤销本工单提交,原源码启动方式不受影响。
## 基本信息 - 类型:需求 - 父级大工单:#1 - 所属 MVP / 版本:#2 / Client 可运行任务闭环(MVP) - 阶段:集成、打包和验收 ## 要解决什么 Client 目前只能从源码启动,没有可重复执行的 Windows 打包脚本、统一版本来源和可校验的发布清单,无法在未安装 Python 的 Windows 环境交付或验证升级时保留 `data/`。 ## 做什么 / 不做什么 - 做: - 使用 Python 3.10、PyQt5 和 PyInstaller 6.x 的 one-dir 模式生成便携目录。 - 建立清晰的程序版本来源、初级程序员可双击的 `client/build_client.bat` 和实际构建脚本。 - 发布目录保持程序文件与根目录 `data/` 分离,更新程序文件时不覆盖用户数据。 - 收集 PyQt5、PyQt-Fluent-Widgets、uiautomator2、adbutils/ADB 所需资源。 - 生成完整便携压缩包、更新压缩包以及包含版本、文件名、大小和 SHA256 的 `autobuy——manifest.json`。 - 增加可在开发环境运行的版本、目录与清单测试。 - 不做: - 不实现联网检查、下载、强制更新或自动替换程序。 - 不保存更新服务器账号、密码、Token 或 Cookie。 - 不改变采购流程,不启用真实下单。 - 不引入 PyQt6、PySide2 或 PySide6。 ## 怎么做 - 新增 `client/src/version.py` 作为单一版本来源。 - 新增 `client/build_client.bat` 作为简单入口,并把复杂步骤放入 `client/packaging/build.ps1`。 - 新增独立的构建依赖文件,固定兼容 Python 3.10 的 PyInstaller 6.x 版本,不污染运行依赖说明。 - 使用 PyInstaller one-dir 生成主程序,组装 `Launcher.exe + app/ + data/` 兼容的便携目录;`data/` 只创建空目录,不进入更新压缩包。 - 修正打包模式下的根目录解析,确保 SQLite 始终位于发布根目录 `data/`。 - 构建脚本生成发布压缩包和 `autobuy——manifest.json`,并用测试校验文件名、版本、大小与 SHA256。 - 修改范围预计包括 `client/src/version.py`、`client/src/db.py`、`client/buyer_main.py`、`client/build_client.bat`、`client/packaging/`、`client/test/`、`.gitignore` 及必要的 Client 基线文档。 ## 验收标准 - [x] 双击 `client/build_client.bat` 可以执行完整构建,失败时返回非零退出码并保留可读错误。 - [x] 构建结果为 one-dir 便携目录,入口、程序依赖和根目录 `data/` 分离。 - [x] 发布目录生成完整便携压缩包和不包含 `data/` 的更新压缩包。 - [x] release 中生成的清单文件名精确为 `autobuy——manifest.json`。 - [x] 清单包含版本、更新包文件名、字节大小和 SHA256,且与实际更新包一致。 - [x] 打包模式下数据库路径指向发布根目录 `data/client.db`,更新 `app/` 不会覆盖数据库。 - [x] PyQt5、PyQt-Fluent-Widgets、uiautomator2 和 adbutils/ADB 的打包收集规则已写入脚本并可检查。 - [x] 真实下单开关仍默认关闭,未新增任何自动付款、风控绕过或凭据落盘行为。 - [x] 自动测试通过;未完成的无 Python 干净 Windows、杀软和真机 ADB 验证明确记录。 ## 怎么验证 从仓库根目录执行: ```powershell C:/Python310/python.exe -m pytest client/test -q C:/Python310/python.exe -m py_compile client/buyer_main.py client/src/version.py client/src/db.py client/build_client.bat ``` 构建后校验 `client/release/autobuy——manifest.json`、压缩包哈希和目录结构;另需在未安装 Python 的 Windows 环境及真实 USB/Wi-Fi Android 设备上人工验证。 ## 风险和回退 - PyInstaller 收集规则可能遗漏 Qt 插件、Fluent 资源或 ADB 二进制;构建脚本应在缺少关键文件时直接失败,不发布不完整产物。 - 数据目录解析错误会造成数据库放进可替换目录;通过独立路径测试和发布目录检查防止回归。 - 本任务不触碰数据库结构;如需回退,可整体撤销本工单提交,原源码启动方式不受影响。
Author
Owner

状态:进行中。已确认本工单只实现打包与发布清单基础;manifest 文件名为 utobuy——manifest.json,联网自动更新另行建单。

状态:进行中。已确认本工单只实现打包与发布清单基础;manifest 文件名为 utobuy——manifest.json,联网自动更新另行建单。
Author
Owner

实施进度:打包与发布清单基础已完成,进入提交与归档阶段。

实现调整:原计划把 Python 辅助模块直接放在 client/packaging,实际构建发现会遮蔽 PyInstaller 依赖的第三方 packaging 包,因此保留 packaging/build.ps1,把 Python 辅助模块放到 client/build_tools。发布结构和验收结果不变。

已验证:

  • client/build_client.bat 完整执行成功;
  • 生成 Launcher.exe + app/ + data/ 便携目录;
  • 生成完整包、仅含 app/ 的更新包和 autobuy——manifest.json;
  • 清单大小与 SHA256 和实际压缩包一致;
  • 打包程序离屏启动成功,数据库落在根目录 data/client.db,没有落入 app/data/;
  • Client 全量测试 239 项通过。

尚未验证:未在另一台完全未安装 Python 的 Windows 机器、杀毒软件环境和真实 USB/Wi-Fi Android 设备上验证最终发布包。

实施进度:打包与发布清单基础已完成,进入提交与归档阶段。 实现调整:原计划把 Python 辅助模块直接放在 `client/packaging`,实际构建发现会遮蔽 PyInstaller 依赖的第三方 `packaging` 包,因此保留 `packaging/build.ps1`,把 Python 辅助模块放到 `client/build_tools`。发布结构和验收结果不变。 已验证: - `client/build_client.bat` 完整执行成功; - 生成 `Launcher.exe + app/ + data/` 便携目录; - 生成完整包、仅含 `app/` 的更新包和 `autobuy——manifest.json`; - 清单大小与 SHA256 和实际压缩包一致; - 打包程序离屏启动成功,数据库落在根目录 `data/client.db`,没有落入 `app/data/`; - Client 全量测试 239 项通过。 尚未验证:未在另一台完全未安装 Python 的 Windows 机器、杀毒软件环境和真实 USB/Wi-Fi Android 设备上验证最终发布包。
Author
Owner

状态:待用户验收。

  • 实现提交:99252ae(feat: 增加 Client Windows 打包基础 (#92))
  • 归档提交:5bb1258(docs: 归档任务 #92)
  • 本地归档:docs/task/92-client-windows打包与发布清单基础.md

工单验收项已按实际验证结果勾选;未验证的干净 Windows、杀软和真实设备范围已明确写入归档。用户验收通过后再关闭 #92,并更新 #2、#1 清单状态。

状态:待用户验收。 - 实现提交:`99252ae`(`feat: 增加 Client Windows 打包基础 (#92)`) - 归档提交:`5bb1258`(`docs: 归档任务 #92`) - 本地归档:`docs/task/92-client-windows打包与发布清单基础.md` 工单验收项已按实际验证结果勾选;未验证的干净 Windows、杀软和真实设备范围已明确写入归档。用户验收通过后再关闭 #92,并更新 #2、#1 清单状态。
Author
Owner

用户已于 2026-08-11 明确验收通过。

  • 本地归档状态已更新为“已完成,用户验收通过”
  • 验收记录提交:eca9289
  • 本工单按项目流程关闭
用户已于 2026-08-11 明确验收通过。 - 本地归档状态已更新为“已完成,用户验收通过” - 验收记录提交:`eca9289` - 本工单按项目流程关闭
ila closed this issue 2026-08-11 10:58:19 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#92