feat: 增加 Client Windows 打包基础 (#92)

This commit is contained in:
chengma
2026-08-10 11:59:13 +08:00
parent 3bfaf44799
commit 99252aecce
14 changed files with 470 additions and 22 deletions
+7 -5
View File
@@ -32,7 +32,7 @@ data/
| 什么情况 | `data/` 在哪 |
|---|---|
| 打包成 exe 后 | `launcher.exe` 旁边(见 [01 需求](01-requirements.md) §8.1 的目录结构) |
| 打包成 exe 后 | 根目录 `Launcher.exe` 旁边(见 [01 需求](01-requirements.md) §8.1 的目录结构) |
| 直接跑源码 | `client/data/`(已在 `.gitignore` 里,不会被提交) |
这叫**便携模式**:整个程序文件夹拷到哪都能用,出问题把文件夹打包发出来就能复现。
@@ -57,11 +57,13 @@ from pathlib import Path
def data_dir() -> Path:
"""可写数据目录:数据库、日志、截图都放这儿。
打包后 = launcher.exe 旁边的 data/
打包后 = 根目录 Launcher.exe 旁边的 data/
跑源码 = client/data/
"""
if getattr(sys, "frozen", False): # frozen=True 说明是打包后的 exe
base = Path(sys.executable).parent / "data"
executable_dir = Path(sys.executable).resolve().parent
install_root = executable_dir.parent if executable_dir.name.casefold() == "app" else executable_dir
base = install_root / "data"
else:
base = Path(__file__).resolve().parents[1] / "data"
base.mkdir(parents=True, exist_ok=True)
@@ -71,7 +73,7 @@ def data_dir() -> Path:
def app_dir() -> Path:
"""只读资源目录:图标、内置 qss 之类,**不要往这里写东西**。
打包后 = app/ 目录(PyInstaller 解包位置)
打包后 = app/dependencies/(PyInstaller 的只读依赖和收集资源目录)
跑源码 = client/
"""
if getattr(sys, "frozen", False):
@@ -106,7 +108,7 @@ PRAGMA busy_timeout = 5000;
使用 `PRAGMA user_version` 管理顺序迁移。数据库升级必须支持从所有已发布版本迁移,不得在启动时直接删除旧库重建。
这条在打包后尤其重要:升级 = 换掉 `launcher.exe` 和 `app/`,`data/` 原样保留,
这条在打包后尤其重要:升级 = 换掉 `app/`,`Launcher.exe` 和 `data/` 原样保留,
所以新版本必须能读旧数据库。
## 3. `pdd_tasks`