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
|
2026-06-17 15:18:38 +08:00
|
|
|
|
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
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
说明:
|
|
|
|
|
|
|
2026-06-17 15:18:38 +08:00
|
|
|
|
- `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 ^
|
2026-06-17 15:18:38 +08:00
|
|
|
|
--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
|
2026-06-17 15:18:38 +08:00
|
|
|
|
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. 打包后验证
|
|
|
|
|
|
|
|
|
|
|
|
打包后必须验证:
|
|
|
|
|
|
|
2026-06-17 15:18:38 +08:00
|
|
|
|
- 双击 `CMBot.exe` 可以启动。
|
2026-06-15 15:37:33 +08:00
|
|
|
|
- 标题栏显示正确版本号。
|
|
|
|
|
|
- 可以打开衣服图片文件夹。
|
|
|
|
|
|
- 可以打开印花图片文件夹。
|
|
|
|
|
|
- 可以显示预览区。
|
|
|
|
|
|
- 可以拖动、缩放、旋转印花。
|
|
|
|
|
|
- 可以导出当前单张图片。
|
|
|
|
|
|
- 可以生成日志文件。
|
|
|
|
|
|
- 程序关闭后再次启动正常。
|
|
|
|
|
|
|
|
|
|
|
|
若测试机器没有 Python 环境,应优先在该机器上验证。
|
|
|
|
|
|
|
|
|
|
|
|
## 12. 发布产物
|
|
|
|
|
|
|
|
|
|
|
|
第一阶段发布产物建议为压缩包:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
2026-06-17 15:18:38 +08:00
|
|
|
|
CMBot-1.0.0.zip
|
2026-06-15 15:37:33 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
压缩包内包含:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
2026-06-17 15:18:38 +08:00
|
|
|
|
CMBot-1.0.0/
|
|
|
|
|
|
CMBot.exe
|
2026-06-15 15:37:33 +08:00
|
|
|
|
_internal/
|
|
|
|
|
|
config/
|
|
|
|
|
|
resources/
|
|
|
|
|
|
README.txt
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
不应包含:
|
|
|
|
|
|
|
|
|
|
|
|
- 源代码。
|
|
|
|
|
|
- 测试文件。
|
|
|
|
|
|
- 开发环境缓存。
|
|
|
|
|
|
- 临时输出图片。
|
|
|
|
|
|
- 本机私人配置。
|
|
|
|
|
|
- 打包中间目录。
|
|
|
|
|
|
|
|
|
|
|
|
## 13. 暂不做
|
|
|
|
|
|
|
|
|
|
|
|
第一阶段不做:
|
|
|
|
|
|
|
|
|
|
|
|
- 局域网共享目录发布。
|
|
|
|
|
|
- 自动检查新版本。
|
|
|
|
|
|
- 自动下载更新。
|
|
|
|
|
|
- 多版本共存启动器。
|
|
|
|
|
|
- 按电脑名控制版本。
|
|
|
|
|
|
- 安装程序。
|
|
|
|
|
|
- Windows 注册表写入。
|
|
|
|
|
|
- 开机自启动。
|
|
|
|
|
|
|
|
|
|
|
|
如果后续要增加这些能力,应新增或扩展发布分发文档,不能直接混入当前第一阶段打包规则。
|