feat: 增加 Client Windows 打包基础 (#92)
This commit is contained in:
@@ -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`
|
||||
|
||||
Reference in New Issue
Block a user