2026-07-03 09:26:27 +08:00
|
|
|
|
# 打包与分发
|
|
|
|
|
|
|
2026-07-13 11:58:05 +08:00
|
|
|
|
> 当前发布仍是免安装 onedir;T-615 已增加自动升级所需的机器可验证清单和发布元数据,但尚不下载或替换客户端程序。
|
2026-07-03 09:26:27 +08:00
|
|
|
|
|
|
|
|
|
|
## 一、打包前提
|
|
|
|
|
|
|
|
|
|
|
|
- 在 Windows 环境执行。
|
2026-07-07 12:06:17 +08:00
|
|
|
|
- Python 环境已能运行源码版 `python main.py`。
|
2026-07-07 14:21:30 +08:00
|
|
|
|
- 打包脚本固定使用 Windows Python Launcher 的 `py -3.10`,不使用当前 PATH 中的 `python`;正式出包前先确认 `py -3.10 --version` 可用。
|
2026-07-03 09:26:27 +08:00
|
|
|
|
- 安装运行依赖和打包依赖:
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
2026-07-07 14:21:30 +08:00
|
|
|
|
py -3.10 -m pip install -r requirements-build.txt
|
2026-07-03 09:26:27 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-07 14:21:30 +08:00
|
|
|
|
`requirements-build.txt` 会先安装 `requirements.txt` 的运行依赖,再安装 PyInstaller。依赖必须安装到 Python 3.10 环境里,避免 PATH 上的 Python 3.7/3.12/3.14 打出不可比对的包。
|
2026-07-03 09:26:27 +08:00
|
|
|
|
|
|
|
|
|
|
## 二、打包命令
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
|
|
|
|
|
powershell -ExecutionPolicy Bypass -File scripts\build_exe.ps1
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
脚本会执行:
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
2026-07-07 14:21:30 +08:00
|
|
|
|
py -3.10 -m PyInstaller --noconfirm --clean cmshopee.spec
|
2026-07-03 09:26:27 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
成功后输出:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
2026-07-07 14:21:30 +08:00
|
|
|
|
dist\cmshopee\
|
|
|
|
|
|
cmshopee.exe
|
|
|
|
|
|
_internal\
|
|
|
|
|
|
<PyInstaller 依赖文件和依赖目录>
|
2026-07-03 09:26:27 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-08 14:21:31 +08:00
|
|
|
|
正式分发入口是 `release\蝦皮圈優化助手<APP_VERSION>.zip`。`dist\cmshopee\` 只是 PyInstaller 构建中间产物,不直接作为正式发包名称。
|
2026-07-03 09:26:27 +08:00
|
|
|
|
|
2026-07-07 14:21:30 +08:00
|
|
|
|
当前 `requirements-build.txt` 锁定 PyInstaller 6.11.1,onedir 产物必须是 `cmshopee.exe` + `_internal\` 集中依赖布局。`scripts\build_exe.ps1` 会校验 `_internal\` 存在;缺失时直接失败,避免把不一致的打包环境误发给用户。
|
|
|
|
|
|
|
|
|
|
|
|
发布包只包含程序文件和依赖文件:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
cmshopee\
|
|
|
|
|
|
cmshopee.exe
|
|
|
|
|
|
_internal\
|
|
|
|
|
|
<PyInstaller 依赖文件和依赖目录>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
首次运行后才会在同级生成 `data\`,用于保存用户本地数据。
|
|
|
|
|
|
|
|
|
|
|
|
## 三、版本号与发布目录
|
|
|
|
|
|
|
2026-07-13 11:58:05 +08:00
|
|
|
|
版本控制采用“单一版本源 + 发布目录带版本号 + 可验证 manifest”的方案。
|
2026-07-07 14:21:30 +08:00
|
|
|
|
|
|
|
|
|
|
### 3.1 单一版本源
|
|
|
|
|
|
|
|
|
|
|
|
新增 `app/version.py`,作为软件名称和版本号的唯一来源:
|
|
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|
APP_NAME = "蝦皮圈優化助手"
|
|
|
|
|
|
APP_CODE_NAME = "cmshopee"
|
|
|
|
|
|
APP_VERSION = "0.1.0"
|
2026-07-07 17:58:28 +08:00
|
|
|
|
APP_UPDATE_CHECK_URL = "https://cm.833729.com/api/v1/client/releases/latest?platform=windows"
|
2026-07-07 14:21:30 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
规则:
|
|
|
|
|
|
|
|
|
|
|
|
- 修改版本号只改 `app/version.py` 的 `APP_VERSION`。
|
2026-07-07 17:58:28 +08:00
|
|
|
|
- 线上版本检查接口只改 `app/version.py` 的 `APP_UPDATE_CHECK_URL`;当前正式接口为 `https://cm.833729.com/api/v1/client/releases/latest?platform=windows`。如需本地开发临时跳过启动检查,可把该值置空。
|
2026-07-07 14:21:30 +08:00
|
|
|
|
- GUI 窗口标题读取同一版本源,显示为 `蝦皮圈優化助手 v0.1.0`。
|
|
|
|
|
|
- 打包脚本读取同一版本源生成发布目录、压缩包和 `version.txt`。
|
|
|
|
|
|
- 禁止在 GUI、构建脚本或文档示例之外重复硬编码不同版本号。
|
|
|
|
|
|
|
|
|
|
|
|
### 3.2 发布目录结构
|
|
|
|
|
|
|
|
|
|
|
|
`scripts\build_exe.ps1` 仍先产出 PyInstaller 原始目录 `dist\cmshopee\`,再组装面向用户分发的 `release\` 目录:
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
release\
|
2026-07-08 14:21:31 +08:00
|
|
|
|
蝦皮圈優化助手0.1.0\
|
2026-07-07 14:21:30 +08:00
|
|
|
|
cmshopee.exe
|
|
|
|
|
|
_internal\
|
|
|
|
|
|
<PyInstaller 依赖文件和依赖目录>
|
|
|
|
|
|
version.txt
|
|
|
|
|
|
README.txt
|
2026-07-13 11:58:05 +08:00
|
|
|
|
package-manifest.json
|
2026-07-08 14:21:31 +08:00
|
|
|
|
蝦皮圈優化助手0.1.0.zip
|
2026-07-13 17:36:46 +08:00
|
|
|
|
release-metadata0.1.0.json
|
2026-07-07 14:21:30 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
说明:
|
|
|
|
|
|
|
|
|
|
|
|
- `dist\cmshopee\` 是构建中间产物,不直接作为正式发包名称。
|
2026-07-08 14:21:31 +08:00
|
|
|
|
- `release\蝦皮圈優化助手<APP_VERSION>\` 是人工验收和分发目录。
|
|
|
|
|
|
- `release\蝦皮圈優化助手<APP_VERSION>.zip` 是交付给用户的便携压缩包。
|
2026-07-07 14:21:30 +08:00
|
|
|
|
- `version.txt` 使用 ASCII/UTF-8 无 BOM 写入 `APP_VERSION`,用于人工排查和未来更新机制读取。
|
|
|
|
|
|
- `README.txt` 用中文写明启动方式、不要放入 `Program Files`、保留 `data\`、升级时覆盖程序文件但不覆盖 `data\`。
|
2026-07-13 11:58:05 +08:00
|
|
|
|
- `package-manifest.json` 记录包格式、版本、入口、更新器协议、允许替换根项目,以及除清单自身外每个程序文件的规范化路径、字节数和 SHA-256。
|
2026-07-13 17:36:46 +08:00
|
|
|
|
- `release-metadata<APP_VERSION>.json` 记录对应版本整个 zip 的准确字节数和 SHA-256,并提供服务端发布字段模板;例如 `0.1.6` 生成 `release-metadata0.1.6.json`。它不放进 zip。
|
2026-07-07 14:21:30 +08:00
|
|
|
|
|
2026-07-08 14:21:31 +08:00
|
|
|
|
当前 PyInstaller 6.11.1 的 onedir 为集中依赖结构,所以 `release\蝦皮圈優化助手<APP_VERSION>\` 必须包含 `cmshopee.exe` 和 `_internal\`,不得只复制单个 exe。
|
2026-07-07 14:21:30 +08:00
|
|
|
|
|
|
|
|
|
|
### 3.3 正式出包流程
|
|
|
|
|
|
|
|
|
|
|
|
1. 修改 `app/version.py` 中的 `APP_VERSION`。
|
|
|
|
|
|
2. 运行语法检查和单元测试。
|
|
|
|
|
|
3. 运行 `powershell -ExecutionPolicy Bypass -File scripts\build_exe.ps1`。
|
2026-07-13 17:36:46 +08:00
|
|
|
|
4. 检查 `version.txt`、GUI 标题栏、`package-manifest.json`、压缩包文件名和 `release-metadata<APP_VERSION>.json` 的版本一致。
|
2026-07-08 14:21:31 +08:00
|
|
|
|
5. 在无 Python 环境的 Windows 10/11 机器上解压 `蝦皮圈優化助手<APP_VERSION>.zip` 并启动验证。
|
2026-07-07 14:21:30 +08:00
|
|
|
|
|
|
|
|
|
|
正式发布构建固定使用 Python 3.10。源码在 Python 3.7.9 上曾验证可运行,但发布包不再以 3.7.9 作为打包基线;脚本会直接调用 `py -3.10` 并校验返回版本必须是 `3.10.x`,避免同一个 `APP_VERSION` 在不同 Python 版本下打出不可比对的包。CI 仍可继续使用 Python 3.11 做自动测试。
|
|
|
|
|
|
|
2026-07-07 17:23:02 +08:00
|
|
|
|
### 3.4 启动版本检查(T-544 第一版)
|
2026-07-07 14:21:30 +08:00
|
|
|
|
|
2026-07-07 17:23:02 +08:00
|
|
|
|
T-544 第一版目标是**启动时检查是否必须升级**,但仍不做自动覆盖升级。
|
|
|
|
|
|
|
|
|
|
|
|
客户端启动流程:
|
|
|
|
|
|
|
2026-07-07 17:58:28 +08:00
|
|
|
|
1. `appconfig.prepare_data_dir()` 成功后、创建 `MainWindow` 前,请求 `app/version.py` 中 `APP_UPDATE_CHECK_URL` 指向的服务器版本接口。
|
|
|
|
|
|
2. 当前版本从 `app/version.py` 的 `APP_VERSION` 读取;`APP_UPDATE_CHECK_URL` 为空时跳过检查并允许进入软件,用于本地开发或尚未配置线上接口的构建。
|
2026-07-07 17:23:02 +08:00
|
|
|
|
3. 如果服务器明确返回“当前版本必须升级”,弹中文阻断框,不进入主界面。
|
|
|
|
|
|
4. 弹窗只提供「下载新版」和「退出程序」。点击「下载新版」用系统浏览器打开下载地址;用户下载后按第六节手动覆盖程序文件。
|
|
|
|
|
|
5. 网络失败、接口超时、JSON 非法或字段缺失时,第一版允许进入软件;只记录本地诊断日志或给低打扰提示,避免服务器故障导致所有用户不可用。
|
|
|
|
|
|
|
|
|
|
|
|
建议版本接口返回结构:
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"latest_version": "0.1.1",
|
|
|
|
|
|
"min_supported_version": "0.1.1",
|
|
|
|
|
|
"force_update": true,
|
2026-07-08 14:21:31 +08:00
|
|
|
|
"download_url": "https://example.com/蝦皮圈優化助手0.1.1.zip",
|
2026-07-07 17:23:02 +08:00
|
|
|
|
"sha256": "optional-release-zip-sha256",
|
|
|
|
|
|
"message": "发现必须升级的新版本,请下载后覆盖当前程序文件,保留 data 目录。"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-07 17:58:28 +08:00
|
|
|
|
客户端同时兼容当前线上接口返回结构:
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"platform": "windows",
|
|
|
|
|
|
"release": {
|
|
|
|
|
|
"version": "0.1.0",
|
2026-07-08 14:21:31 +08:00
|
|
|
|
"download_url": "https://example.com/蝦皮圈優化助手0.1.0.zip",
|
2026-07-07 17:58:28 +08:00
|
|
|
|
"sha256": "",
|
|
|
|
|
|
"release_notes": "发布说明"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
映射规则:`release.version` 作为 `latest_version`,`release.download_url` 作为下载地址,`release.sha256` 作为校验值,`release.release_notes` 作为弹窗说明。若该结构未返回 `min_supported_version` 或 `force_update=true`,客户端只记录可用新版本信息,不会阻断启动。
|
|
|
|
|
|
|
2026-07-07 17:23:02 +08:00
|
|
|
|
客户端判定规则:
|
|
|
|
|
|
|
|
|
|
|
|
- `APP_VERSION < min_supported_version`:必须升级。
|
|
|
|
|
|
- `force_update=true` 且 `APP_VERSION < latest_version`:必须升级。
|
|
|
|
|
|
- 只比较语义化数字段,不能用字符串字典序比较版本号。
|
|
|
|
|
|
- `download_url` 为空时不能进入自动下载;弹窗提示联系管理员或查看发布地址。
|
|
|
|
|
|
|
|
|
|
|
|
第一版明确不做:
|
|
|
|
|
|
|
|
|
|
|
|
- 不自动下载并覆盖正在运行的 `cmshopee.exe`。
|
|
|
|
|
|
- 不自动覆盖 `_internal\`。
|
|
|
|
|
|
- 不删除、不覆盖、不合并 `data\`。
|
|
|
|
|
|
- 不做 Launcher、后台替换、增量补丁、签名校验或失败回滚。
|
|
|
|
|
|
|
|
|
|
|
|
原因:Windows 下运行中的 `cmshopee.exe` 和 PyInstaller onedir 依赖目录很容易出现文件占用、半覆盖失败、权限不足或杀毒拦截。第一版只做“强制提示 + 下载新版 + 用户手动覆盖”,和当前便携包更新方式一致。
|
|
|
|
|
|
|
2026-07-13 11:58:05 +08:00
|
|
|
|
### 3.5 自动升级发布基础(T-615)
|
2026-07-07 17:23:02 +08:00
|
|
|
|
|
2026-07-13 17:36:46 +08:00
|
|
|
|
`app/release_manifest.py` 是发布清单与 zip 元数据的唯一生成逻辑。构建脚本按以下顺序执行:组装 release 目录、拒绝用户数据和未知根项目、生成 `package-manifest.json`、压缩 zip、计算 zip hash/大小、生成 `release-metadata<APP_VERSION>.json`。同版本重打只覆盖当前版本元数据,保留其他版本文件,并清理历史无版本 `release-metadata.json`。允许的根项目仅为 `cmshopee.exe`、`_internal/`、`version.txt`、`README.txt`、清单和后续独立更新器;明确禁止 `data/` 与 `.cmshopee-update/`。
|
2026-07-07 14:21:30 +08:00
|
|
|
|
|
2026-07-13 11:58:05 +08:00
|
|
|
|
T-615 不改变客户端行为:T-544 仍只打开浏览器下载。客户端下载、解压校验、独立进程替换、回滚和重启分别由 T-616 至 T-619 实现。清单预留签名字段,但当前只验证完整性,不宣称已验证发布者身份。
|
2026-07-07 14:21:30 +08:00
|
|
|
|
|
2026-07-13 16:19:03 +08:00
|
|
|
|
T-616 提供无Qt依赖的安全下载暂存层 `app/update_installer.py`。安装包下载到 `<安装目录>/.cmshopee-update/downloads/`,完成大小与zip SHA-256校验后安全解压到同盘 `staging/`;路径穿越、符号链接、大小写重复、Windows保留名、ADS、异常压缩比、文件数/解压总量超限,以及manifest缺失或逐文件hash不一致都会拒绝。完整验证后才原子写 `pending.json`,当前程序目录和 `data/` 不变。
|
2026-07-13 12:02:47 +08:00
|
|
|
|
|
2026-07-13 12:07:59 +08:00
|
|
|
|
T-617 增加独立 `cmshopee-updater.exe`。构建脚本用 `cmshopee-updater.spec` 生成无控制台单文件更新器并放进release和manifest。执行更新前,主程序把它复制到系统临时目录;更新器有上限地等待主程序退出,再按manifest白名单将旧程序根项目整体移动到 `.cmshopee-update/backup/`,把已验证暂存根项目移入安装目录。每一步写事务journal,移动或新版启动失败时逆序恢复;`data/` 与安装根未知文件不扫描、不移动、不删除。
|
|
|
|
|
|
|
2026-07-13 12:12:58 +08:00
|
|
|
|
T-618 已把安全暂存和独立更新器接回启动门禁。强制升级窗口使用QThread执行下载、hash、解压和manifest校验,主线程持续显示中文阶段、进度和字节数;协作式取消会等待线程清理,避免线程仍运行时销毁。确认独立更新器进程创建成功后旧主程序退出;强制响应后的任何准备失败都保持阻断,只能重试或退出。版本接口完全不可达/非法仍按T-544策略失败放行。
|
|
|
|
|
|
|
2026-07-13 12:23:46 +08:00
|
|
|
|
T-619 增加启动健康确认与失败熔断。新版带事务参数启动,在 `.cmshopee-update/transactions/<事务>/health.json` 原子写 `process_started`、`main_window_ready` 或 `environment_blocked`。更新器在主窗口就绪前保留旧根项目;早期退出/超时会回滚并按版本+zip hash写 `failed-versions.json`,防止同一坏包无限循环。主窗口就绪后清理pending、zip、staging和本次成功备份;环境阻断保留新版与备份。备份清理只处理 `.cmshopee-update/backup/` 且保留最近两份,不扫描 `data/`。
|
|
|
|
|
|
|
2026-07-13 16:19:03 +08:00
|
|
|
|
T-623 为外部对象存储/CDN下载链接增加临时 HTTP 兼容。版本检查接口仍固定使用受信任 HTTPS;安装包 `download_url` 不限制域名,可以使用任意公网 HTTP/HTTPS 域名或公网 IP,并允许跨域、跨协议重定向。初始地址、每次跳转和最终响应都会拒绝本机、内网、账号信息和非 HTTP(S) 协议。HTTP 不会降低安装校验标准:声明大小、整包 SHA-256、安全解压、包内manifest、事务替换和健康回滚全部照常执行;强制升级窗口会显示临时 HTTP 通道提示。服务端外链支持 HTTPS 后应删除 HTTP 分支。
|
|
|
|
|
|
|
2026-07-13 17:17:25 +08:00
|
|
|
|
T-624 将 cmhub 版本接口收敛为实际字段:`version`、`download_url`、`sha256`、`release_notes`、`force_update`、`size_bytes`、`published_at`。服务端不需要返回 `package_format` 或更新器协议;客户端固定使用当前 `cmshopee-portable-v1` 和更新器协议构造安装元数据,并在解压后以包内manifest复核真实格式和协议。因此接口字段减少不等于跳过包格式或协议安全检查。
|
|
|
|
|
|
|
2026-07-07 14:21:30 +08:00
|
|
|
|
## 四、绝不打包的本地数据
|
2026-07-03 09:26:27 +08:00
|
|
|
|
|
|
|
|
|
|
发布包里不能包含以下本地数据、密钥、业务数据或登录态:
|
|
|
|
|
|
|
|
|
|
|
|
- `config.json`
|
|
|
|
|
|
- `config/ai_models.json`
|
|
|
|
|
|
- `cmshopee.db`、`cmshopee.db-wal`、`cmshopee.db-shm`
|
|
|
|
|
|
- `db.sqlite`
|
|
|
|
|
|
- `chrome_user_data_dir/`
|
|
|
|
|
|
- `images/`
|
|
|
|
|
|
- `logs/`
|
|
|
|
|
|
- `prompts/`
|
|
|
|
|
|
- `title_prompt.txt`
|
2026-07-07 14:12:32 +08:00
|
|
|
|
- `data/`
|
2026-07-03 09:26:27 +08:00
|
|
|
|
- 运营填写后的 Excel 文件
|
|
|
|
|
|
|
|
|
|
|
|
`cmshopee.spec` 不声明任何 `datas`;`scripts/build_exe.ps1` 会在打包后检查 `dist\cmshopee\`,如果发现上述路径会直接失败。
|
|
|
|
|
|
|
2026-07-08 09:26:25 +08:00
|
|
|
|
T-548 后 cmhub 图片下载可在 Windows 上优先调用系统自带 curl。curl 在 Windows 10+ 通常位于 `C:\Windows\System32\curl.exe`,发布包不捆绑 curl、wget 或其它下载二进制;如果系统无 curl 或 curl 执行失败,程序会自动回退到内置 requests 下载。
|
|
|
|
|
|
|
2026-07-07 14:21:30 +08:00
|
|
|
|
## 五、首次运行与本地数据位置
|
2026-07-03 09:26:27 +08:00
|
|
|
|
|
2026-07-07 14:12:32 +08:00
|
|
|
|
T-538 后,打包版不再把全进程工作目录切到 `cmshopee.exe` 所在目录;路径由 `app/appconfig.py` 按显式数据根解析。
|
2026-07-03 09:26:27 +08:00
|
|
|
|
|
2026-07-07 14:12:32 +08:00
|
|
|
|
首次运行时,程序会在 exe 同级创建单独的 `data\` 子目录,并把所有用户本地数据放进去:
|
2026-07-03 09:26:27 +08:00
|
|
|
|
|
2026-07-07 14:12:32 +08:00
|
|
|
|
```text
|
|
|
|
|
|
cmshopee\
|
|
|
|
|
|
cmshopee.exe
|
2026-07-07 14:21:30 +08:00
|
|
|
|
_internal\
|
|
|
|
|
|
<PyInstaller 依赖文件和依赖目录>
|
2026-07-07 14:12:32 +08:00
|
|
|
|
data\
|
|
|
|
|
|
config.json
|
|
|
|
|
|
config\
|
|
|
|
|
|
ai_models.json
|
|
|
|
|
|
cmhub.json
|
|
|
|
|
|
cmshopee.db
|
|
|
|
|
|
chrome_user_data_dir\
|
|
|
|
|
|
images\
|
|
|
|
|
|
logs\
|
|
|
|
|
|
prompts\
|
|
|
|
|
|
title_prompt.txt
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
源码运行时同理使用项目根目录下的 `data\`。`config.json` 内的 `user_data_root`、`image_dir`、`db_path` 默认仍保存为 `chrome_user_data_dir`、`images`、`cmshopee.db` 等相对值,运行时再解析到 `data\` 下,保持便携。
|
2026-07-03 09:26:27 +08:00
|
|
|
|
|
|
|
|
|
|
这些文件属于用户本地数据,不随新版本程序包覆盖。
|
|
|
|
|
|
|
2026-07-07 14:12:32 +08:00
|
|
|
|
### 旧布局迁移
|
|
|
|
|
|
|
|
|
|
|
|
如果用户从 T-524 旧包升级,新版首次启动会检查 exe 顶层是否存在旧布局数据,例如 `config.json`、`config\`、`cmshopee.db`、`chrome_user_data_dir\`、`images\`、`logs\`、`prompts\`、`title_prompt.txt`。若 `data\` 中没有同名目标,程序会自动移动到 `data\` 下。
|
|
|
|
|
|
|
|
|
|
|
|
如果旧布局和 `data\` 中同时存在同名数据,程序不会覆盖,会以“数据迁移冲突”提示用户先手动合并或备份,避免误丢账号、任务、图片或登录态。此类冲突不是目录不可写,不应直接归类为“数据目录不可写”。
|
|
|
|
|
|
|
|
|
|
|
|
启动时会检测 `data\` 是否可写;如果程序放在 `Program Files` 等只读目录导致写入失败,才会以“数据目录不可写”提示“请把程序放到可写目录,勿放 Program Files”并退出。
|
|
|
|
|
|
|
2026-07-07 14:21:30 +08:00
|
|
|
|
## 六、用户后续更新方式
|
2026-07-03 09:26:27 +08:00
|
|
|
|
|
2026-07-13 12:23:46 +08:00
|
|
|
|
尚未安装自动升级引导版本的旧用户仍按以下方式人工覆盖;安装T-619及之后版本后,强制升级窗口可自动下载、替换和重启:
|
2026-07-03 09:26:27 +08:00
|
|
|
|
|
|
|
|
|
|
1. 让用户先关闭 cmshopee。
|
|
|
|
|
|
2. 建议用户备份当前整个程序文件夹。
|
2026-07-08 14:21:31 +08:00
|
|
|
|
3. 解压新版 `release\蝦皮圈優化助手<APP_VERSION>.zip`。
|
2026-07-07 14:21:30 +08:00
|
|
|
|
4. 覆盖新版程序文件和依赖文件。当前 PyInstaller 6.11.1 是 `cmshopee.exe` + `_internal\` onedir,不能只覆盖 `cmshopee.exe`;应把新版 `cmshopee.exe`、`_internal\`、`version.txt`、`README.txt` 等程序文件整体覆盖到旧程序目录。
|
2026-07-07 14:12:32 +08:00
|
|
|
|
5. 保留旧目录里的 `data\`,不要删除、覆盖或合并它。
|
2026-07-03 09:26:27 +08:00
|
|
|
|
|
2026-07-07 14:12:32 +08:00
|
|
|
|
如果用户把整个旧目录删除再放新版,`data\` 里的账号、任务记录、图片和登录态也会一起丢失,只能从备份恢复。
|
2026-07-03 09:26:27 +08:00
|
|
|
|
|
2026-07-07 14:21:30 +08:00
|
|
|
|
## 七、验证清单
|
2026-07-03 09:26:27 +08:00
|
|
|
|
|
|
|
|
|
|
打包前后至少执行:
|
|
|
|
|
|
|
|
|
|
|
|
```powershell
|
2026-07-07 14:21:30 +08:00
|
|
|
|
py -3.10 -m compileall app main.py
|
|
|
|
|
|
py -3.10 -m unittest discover -s tests
|
2026-07-03 09:26:27 +08:00
|
|
|
|
powershell -ExecutionPolicy Bypass -File scripts\build_exe.ps1
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
打包成功后确认:
|
|
|
|
|
|
|
|
|
|
|
|
- `dist\cmshopee\cmshopee.exe` 存在。
|
2026-07-07 14:21:30 +08:00
|
|
|
|
- 当前 PyInstaller 6.11.1 下 `dist\cmshopee\_internal\` 必须存在。
|
|
|
|
|
|
- `dist\cmshopee\` 中没有第四节列出的本地数据,尤其不能含 `data\`。
|
2026-07-08 14:21:31 +08:00
|
|
|
|
- `release\蝦皮圈優化助手<APP_VERSION>\version.txt`、GUI 标题栏版本、压缩包文件名三者一致。
|
2026-07-07 14:12:32 +08:00
|
|
|
|
- 在干净目录首次启动时能生成 `data\config.json` 并进入 GUI。
|
2026-07-07 12:06:17 +08:00
|
|
|
|
- 在目标 Windows 10/11 机器或虚拟机上启动 release exe 后,主窗口标题栏完整可见,左边缘不出屏,用户能用标题栏拖动窗口;小分辨率环境不得出现窗口卡在左上角且标题栏不可拖动的问题(见 T-541)。
|
|
|
|
|
|
|
|
|
|
|
|
涉及 Shopee/CDP 的真实更新能力,仍按任务文档要求用测试商品做人工回归;打包任务本身不新增自动绕过登录、验证码或风控的能力。
|