|
|
|
|
|
# 桌面端打包说明 (Electron + React UI)
|
|
|
|
|
|
|
|
|
|
|
|
本项目可打包为桌面应用,使用 Electron 作为桌面壳,`apps/dsa-web` 的 React UI 作为界面。
|
|
|
|
|
|
|
|
|
|
|
|
## 架构说明
|
|
|
|
|
|
|
|
|
|
|
|
- React UI(Vite 构建)由本地 FastAPI 服务托管
|
|
|
|
|
|
- Electron 启动时自动拉起后端服务,等待 `/api/health` 就绪后加载 UI
|
|
|
|
|
|
- 用户配置文件 `.env` 和数据库放在 exe 同级目录(便携模式)
|
|
|
|
|
|
|
|
|
|
|
|
## 本地开发
|
|
|
|
|
|
|
|
|
|
|
|
一键启动(开发模式):
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
powershell -ExecutionPolicy Bypass -File scripts\run-desktop.ps1
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
或手动执行:
|
|
|
|
|
|
|
|
|
|
|
|
1) 构建 React UI(输出到 `static/`)
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd apps/dsa-web
|
|
|
|
|
|
npm install
|
|
|
|
|
|
npm run build
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
2) 启动 Electron 应用(自动拉起后端)
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd apps/dsa-desktop
|
|
|
|
|
|
npm install
|
|
|
|
|
|
npm run dev
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
首次运行时会自动从 `.env.example` 复制生成 `.env`。
|
|
|
|
|
|
|
|
|
|
|
|
## 打包 (Windows)
|
|
|
|
|
|
|
|
|
|
|
|
### 前置条件
|
|
|
|
|
|
|
|
|
|
|
|
- Node.js 18+
|
|
|
|
|
|
- Python 3.10+
|
|
|
|
|
|
- 开启 Windows 开发者模式(electron-builder 需要创建符号链接)
|
|
|
|
|
|
- 设置 -> 隐私和安全性 -> 开发者选项 -> 开发者模式
|
|
|
|
|
|
|
|
|
|
|
|
### 一键打包
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
powershell -ExecutionPolicy Bypass -File scripts\build-all.ps1
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
该脚本会依次执行:
|
|
|
|
|
|
1. 构建 React UI
|
|
|
|
|
|
2. 安装 Python 依赖
|
|
|
|
|
|
3. PyInstaller 打包后端
|
|
|
|
|
|
4. electron-builder 打包桌面应用
|
|
|
|
|
|
|
|
|
|
|
|
### 分步打包
|
|
|
|
|
|
|
|
|
|
|
|
1) 构建 React UI
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd apps/dsa-web
|
|
|
|
|
|
npm install
|
|
|
|
|
|
npm run build
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
2) 打包 Python 后端
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
pip install pyinstaller
|
|
|
|
|
|
pip install -r requirements.txt
|
|
|
|
|
|
pyinstaller --name stock_analysis --onefile --noconsole --add-data "static;static" main.py
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
将生成的 exe 复制到 `dist/backend/`:
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
mkdir dist\backend
|
|
|
|
|
|
copy dist\stock_analysis.exe dist\backend\stock_analysis.exe
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
3) 打包 Electron 桌面应用
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd apps/dsa-desktop
|
|
|
|
|
|
npm install
|
|
|
|
|
|
npm run build
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
打包产物位于 `apps/dsa-desktop/dist/`。
|
|
|
|
|
|
|
|
|
|
|
|
## 目录结构
|
|
|
|
|
|
|
|
|
|
|
|
打包后用户拿到的目录结构(便携模式):
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
win-unpacked/
|
|
|
|
|
|
Daily Stock Analysis.exe <- 双击启动
|
|
|
|
|
|
.env <- 用户配置文件(首次启动自动生成)
|
|
|
|
|
|
data/
|
|
|
|
|
|
stock_analysis.db <- 数据库
|
|
|
|
|
|
logs/
|
|
|
|
|
|
desktop.log <- 运行日志
|
|
|
|
|
|
resources/
|
|
|
|
|
|
.env.example <- 配置模板
|
|
|
|
|
|
backend/
|
|
|
|
|
|
stock_analysis.exe <- 后端服务
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 配置文件说明
|
|
|
|
|
|
|
|
|
|
|
|
- `.env` 放在 exe 同目录下
|
|
|
|
|
|
- 首次启动时自动从 `.env.example` 复制生成
|
|
|
|
|
|
- 用户需要编辑 `.env` 配置以下内容:
|
|
|
|
|
|
- `GEMINI_API_KEY` 或 `OPENAI_API_KEY`:AI 分析必需
|
|
|
|
|
|
- `STOCK_LIST`:自选股列表(逗号分隔)
|
|
|
|
|
|
- 其他可选配置参考 `.env.example`
|
|
|
|
|
|
|
|
|
|
|
|
## 常见问题
|
|
|
|
|
|
|
|
|
|
|
|
### 启动后一直显示 "Preparing backend..."
|
|
|
|
|
|
|
|
|
|
|
|
1. 检查 `logs/desktop.log` 查看错误信息
|
|
|
|
|
|
2. 确认 `.env` 文件存在且配置正确
|
|
|
|
|
|
3. 确认端口 8000-8100 未被占用
|
|
|
|
|
|
|
|
|
|
|
|
### 后端启动报 ModuleNotFoundError
|
|
|
|
|
|
|
|
|
|
|
|
PyInstaller 打包时缺少模块,需要在 `scripts/build-backend.ps1` 中增加 `--hidden-import`。
|
|
|
|
|
|
|
|
|
|
|
|
### UI 加载空白
|
|
|
|
|
|
|
|
|
|
|
|
确认 `static/index.html` 存在,如不存在需重新构建 React UI。
|
|
|
|
|
|
|
|
|
|
|
|
## 分发给用户
|
|
|
|
|
|
|
|
|
|
|
|
将 `apps/dsa-desktop/dist/win-unpacked/` 整个文件夹打包发给用户即可。用户只需:
|
|
|
|
|
|
|
|
|
|
|
|
1. 解压文件夹
|
|
|
|
|
|
2. 编辑 `.env` 配置 API Key 和股票列表
|
|
|
|
|
|
3. 双击 `Daily Stock Analysis.exe` 启动
|