Files
cmbot/docs/09-packaging-release.md
T

263 lines
5.8 KiB
Markdown
Raw Normal View History

2026-06-15 15:37:33 +08:00
# 打包发布设计
## 1. 文档定位
本文档定义第一阶段的本地打包和发布规则。当前阶段只考虑将软件打包为可在 Windows 电脑上运行的桌面程序。
暂不包含:
- 局域网分发。
- 自动更新。
- 多版本启动器。
- 强制升级策略。
- 远程版本策略管理。
这些能力后续需要时再单独补充设计文档。
## 2. 打包目标
- 将 PySide6 桌面程序打包为 Windows 可运行程序。
- 目标电脑无需预装 Python 环境。
- 打包产物应包含运行所需依赖、资源文件、默认配置和模板。
- 打包后的程序应能在 Windows 10 / Windows 11 上启动。
- 打包结构应方便排查 Qt 插件、资源、配置和日志问题。
## 3. 推荐打包方式
使用 PyInstaller。
第一阶段推荐使用 `onedir` 模式:
```bash
pyinstaller --onedir --windowed src/main.py
```
原因:
- PySide6 / Qt 依赖文件较多,`onedir` 更容易排查问题。
- 启动速度通常优于 `onefile`。
- 资源文件、配置文件、模板文件更容易随程序目录管理。
- 后续如需局域网分发或增量替换,目录模式更合适。
不推荐第一阶段使用 `onefile`:
- 启动时需要解压临时文件。
- Qt 插件问题更难排查。
- 日志、模板和配置路径更容易混乱。
## 4. Python 与依赖要求
必须遵守:
- Python 版本:Python 3.7。
- GUI 框架:PySide6。
- 推荐 PySide6 版本:`PySide6==6.5.3`。
- 图片处理:Pillow。
- 打包工具:PyInstaller。
依赖版本应在项目根目录的 `requirements.txt` 中锁定。
打包前必须确认依赖可以在 Python 3.7 环境中安装。
## 5. 发布目录结构
推荐打包后的发布目录:
```text
CMBot/
CMBot.exe
2026-06-15 15:37:33 +08:00
_internal/
config/
app_config.json
templates.json
resources/
icons/
styles/
logs/
output/
README.txt
```
说明:
- `CMBot.exe`:主程序入口。
2026-06-15 15:37:33 +08:00
- `_internal/`:PyInstaller 依赖目录。
- `config/`:默认配置和模板配置。
- `resources/`:图标、样式等资源。
- `logs/`:运行日志目录,程序启动时可自动创建。
- `output/`:默认输出目录,可自动创建。
- `README.txt`:给用户的简短使用说明。
## 6. 可写目录规则
程序运行时可能写入:
- 日志文件。
- 用户配置。
- 自定义模板。
- 导出图片。
规则:
- 程序必须确保 `logs/` 目录存在。
- 程序必须确保默认 `output/` 目录存在。
- 配置和模板写入前必须确认目录可写。
- 如果安装目录不可写,应提示用户选择可写目录,或后续改用用户数据目录。
第一阶段可以默认将配置、模板、日志和输出放在程序目录下,但必须处理目录不可写的错误。
## 7. 资源文件打包
需要随程序打包的资源:
- 应用图标。
- UI 样式文件。
- 默认模板文件。
- 默认配置文件。
规则:
- 资源文件路径不能写死为开发机绝对路径。
- 程序需要通过统一的资源路径函数获取资源。
- 打包环境和开发环境应使用同一套路径访问规则。
建议提供路径辅助函数:
```text
get_app_dir()
get_resource_path(relative_path)
get_config_path(relative_path)
get_log_dir()
get_output_dir()
```
## 8. PyInstaller 配置
第一阶段可以先使用命令行打包;项目稳定后应维护 `.spec` 文件。
建议命令:
```bash
pyinstaller ^
--onedir ^
--windowed ^
--name CMBot ^
2026-06-15 15:37:33 +08:00
--add-data "resources;resources" ^
--add-data "config;config" ^
src/main.py
```
注意:
- Windows 下 `--add-data` 的源路径和目标路径使用分号 `;` 分隔。
- 如果在 PowerShell 中执行,换行符和引号需要按实际环境调整。
- 打包命令应后续固化到脚本中,例如 `scripts/build.ps1`。
## 9. 版本号规则
软件需要有明确版本号。
规则:
- 当前版本号必须显示在标题栏软件名称右侧。
- 版本号应从统一位置读取,不应在多个 UI 文件中硬编码。
- 打包产物的版本号、窗口显示版本号和发布目录版本号应一致。
建议维护:
```text
src/version.py
```
示例:
```python
APP_NAME = "自动合成印花服饰效果图工具"
APP_VERSION = "1.0.0"
```
发布目录建议带版本号:
```text
CMBot-1.0.0/
2026-06-15 15:37:33 +08:00
```
## 10. 打包前检查
打包前必须检查:
- Python 版本是否为 3.7。
- 依赖是否安装成功。
- 程序是否可以在开发环境启动。
- 默认配置文件是否存在。
- 默认模板文件是否存在。
- 资源文件路径是否正确。
- 应用版本号是否正确。
建议命令:
```bash
python --version
pip freeze
python src/main.py
```
## 11. 打包后验证
打包后必须验证:
- 双击 `CMBot.exe` 可以启动。
2026-06-15 15:37:33 +08:00
- 标题栏显示正确版本号。
- 可以打开衣服图片文件夹。
- 可以打开印花图片文件夹。
- 可以显示预览区。
- 可以拖动、缩放、旋转印花。
- 可以导出当前单张图片。
- 可以生成日志文件。
- 程序关闭后再次启动正常。
若测试机器没有 Python 环境,应优先在该机器上验证。
## 12. 发布产物
第一阶段发布产物建议为压缩包:
```text
CMBot-1.0.0.zip
2026-06-15 15:37:33 +08:00
```
压缩包内包含:
```text
CMBot-1.0.0/
CMBot.exe
2026-06-15 15:37:33 +08:00
_internal/
config/
resources/
README.txt
```
不应包含:
- 源代码。
- 测试文件。
- 开发环境缓存。
- 临时输出图片。
- 本机私人配置。
- 打包中间目录。
## 13. 暂不做
第一阶段不做:
- 局域网共享目录发布。
- 自动检查新版本。
- 自动下载更新。
- 多版本共存启动器。
- 按电脑名控制版本。
- 安装程序。
- Windows 注册表写入。
- 开机自启动。
如果后续要增加这些能力,应新增或扩展发布分发文档,不能直接混入当前第一阶段打包规则。