mirror of
https://github.com/goldenfishs/MRobot.git
synced 2026-02-04 18:00:19 +08:00
添加手册
This commit is contained in:
parent
8101d2c3a0
commit
b2c24ef6bd
BIN
.~OBOT开发版G型--用户手册.docx
Normal file
BIN
.~OBOT开发版G型--用户手册.docx
Normal file
Binary file not shown.
131
BUILD_GUIDE.md
131
BUILD_GUIDE.md
@ -1,131 +0,0 @@
|
|||||||
# MRobot 打包说明
|
|
||||||
|
|
||||||
## 问题原因
|
|
||||||
|
|
||||||
之前使用 `--onefile` 模式和 `--add-data` 添加 assets 导致的问题:
|
|
||||||
1. `--onefile` 将所有文件打包进 exe,运行时解压到临时目录 `sys._MEIPASS`
|
|
||||||
2. 更新代码时下载到 `exe目录/assets`
|
|
||||||
3. 但读取时从 `sys._MEIPASS/assets` 读取(每次都是打包时的原始文件)
|
|
||||||
4. 结果:更新成功但读不到新文件
|
|
||||||
|
|
||||||
## 解决方案:使用 `--onedir` 模式
|
|
||||||
|
|
||||||
### 方法一:使用提供的脚本(推荐)
|
|
||||||
|
|
||||||
**macOS/Linux:**
|
|
||||||
```bash
|
|
||||||
./build.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
**Windows:**
|
|
||||||
```cmd
|
|
||||||
build.bat
|
|
||||||
```
|
|
||||||
|
|
||||||
### 方法二:手动执行命令
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 清理旧文件
|
|
||||||
rm -rf build dist *.spec
|
|
||||||
|
|
||||||
# 打包(不要添加 --add-data)
|
|
||||||
pyinstaller MRobot.py \
|
|
||||||
--onedir \
|
|
||||||
--windowed \
|
|
||||||
--icon=assets/logo/M.ico \
|
|
||||||
--name=MRobot \
|
|
||||||
--clean
|
|
||||||
```
|
|
||||||
|
|
||||||
### 创建安装程序
|
|
||||||
|
|
||||||
打包完成后,使用 Inno Setup 编译 `MRobot.iss` 创建安装程序。
|
|
||||||
|
|
||||||
## 打包模式对比
|
|
||||||
|
|
||||||
### `--onedir` 模式(推荐)✅
|
|
||||||
- **优点:**
|
|
||||||
- assets 文件夹在 exe 同级目录,可以被更新覆盖
|
|
||||||
- 更新代码库后能正确读取新文件
|
|
||||||
- 文件结构清晰,便于调试
|
|
||||||
- **缺点:**
|
|
||||||
- 需要分发整个文件夹(但可以用 Inno Setup 打包成单个安装程序)
|
|
||||||
|
|
||||||
### `--onefile` 模式(不推荐)❌
|
|
||||||
- **优点:**
|
|
||||||
- 单个 exe 文件
|
|
||||||
- **缺点:**
|
|
||||||
- 外部资源文件无法更新(因为每次都从 exe 内部解压)
|
|
||||||
- 启动较慢(需要解压)
|
|
||||||
- 不适合需要更新资源的应用
|
|
||||||
|
|
||||||
## 文件结构
|
|
||||||
|
|
||||||
### 打包后(onedir 模式)
|
|
||||||
```
|
|
||||||
dist/MRobot/
|
|
||||||
├── MRobot.exe # 主程序
|
|
||||||
├── _internal/ # PyInstaller 依赖库
|
|
||||||
└── assets/ # 由 Inno Setup 安装时复制
|
|
||||||
├── logo/
|
|
||||||
├── User_code/
|
|
||||||
└── mech_lib/
|
|
||||||
```
|
|
||||||
|
|
||||||
### 安装后
|
|
||||||
```
|
|
||||||
%APPDATA%\MRobot\ # 或 {userappdata}\MRobot
|
|
||||||
├── MRobot.exe
|
|
||||||
├── _internal/
|
|
||||||
└── assets/ # 可以被更新覆盖
|
|
||||||
├── logo/
|
|
||||||
├── User_code/ # 👈 更新代码库会更新这里
|
|
||||||
└── mech_lib/
|
|
||||||
```
|
|
||||||
|
|
||||||
## 工作原理
|
|
||||||
|
|
||||||
1. **首次运行:**
|
|
||||||
- 代码检测到 `exe目录/assets` 不存在
|
|
||||||
- 从 `sys._MEIPASS/assets` 复制初始资源(如果存在)
|
|
||||||
- 但在 onedir 模式下,Inno Setup 已经安装了 assets,所以直接使用
|
|
||||||
|
|
||||||
2. **更新代码库:**
|
|
||||||
- 下载最新代码到 `exe目录/assets/User_code`
|
|
||||||
- 清除缓存
|
|
||||||
- 重新读取 `exe目录/assets/User_code`(能看到新模块如 oid)
|
|
||||||
|
|
||||||
3. **重新打开软件:**
|
|
||||||
- 直接读取 `exe目录/assets`(包含更新后的文件)
|
|
||||||
|
|
||||||
## 注意事项
|
|
||||||
|
|
||||||
1. **不要使用 `--add-data "assets;assets"`**
|
|
||||||
- 这会将 assets 打包进 exe,导致无法更新
|
|
||||||
|
|
||||||
2. **Inno Setup 负责安装 assets**
|
|
||||||
- ISS 文件会将 assets 复制到安装目录
|
|
||||||
- 这样 assets 就在 exe 同级目录,可以被更新
|
|
||||||
|
|
||||||
3. **代码已经优化**
|
|
||||||
- `CodeGenerator.get_assets_dir()` 优先使用 `exe目录/assets`
|
|
||||||
- 更新和读取使用相同路径
|
|
||||||
- 首次运行时自动初始化(如果需要)
|
|
||||||
|
|
||||||
## 测试步骤
|
|
||||||
|
|
||||||
1. 运行 `build.bat` 或 `build.sh` 打包
|
|
||||||
2. 使用 Inno Setup 编译 `MRobot.iss` 创建安装程序
|
|
||||||
3. 安装并运行 MRobot
|
|
||||||
4. 点击"选择项目路径",选择一个 CubeMX 项目
|
|
||||||
5. 点击"更新代码库"
|
|
||||||
6. 检查是否能看到新的模块(如 oid)
|
|
||||||
7. 关闭软件,重新打开
|
|
||||||
8. 再次进入项目,确认新模块仍然存在
|
|
||||||
|
|
||||||
## 版本更新
|
|
||||||
|
|
||||||
修改 `MRobot.iss` 中的版本号:
|
|
||||||
```ini
|
|
||||||
AppVersion=1.0.9 ; 更新这里
|
|
||||||
```
|
|
||||||
BIN
MROBOT.docx
Normal file
BIN
MROBOT.docx
Normal file
Binary file not shown.
BIN
MROBOT开发版G型--用户手册.docx
Normal file
BIN
MROBOT开发版G型--用户手册.docx
Normal file
Binary file not shown.
BIN
MROBOT开发版G型--用户手册.pdf
Normal file
BIN
MROBOT开发版G型--用户手册.pdf
Normal file
Binary file not shown.
BIN
assets/.DS_Store
vendored
BIN
assets/.DS_Store
vendored
Binary file not shown.
51
build.bat
51
build.bat
@ -1,51 +0,0 @@
|
|||||||
@echo off
|
|
||||||
chcp 65001 > nul
|
|
||||||
echo ==========================================
|
|
||||||
echo MRobot 打包脚本
|
|
||||||
echo ==========================================
|
|
||||||
echo.
|
|
||||||
|
|
||||||
REM 清理旧的构建文件
|
|
||||||
echo 1. 清理旧的构建文件...
|
|
||||||
if exist build rmdir /s /q build
|
|
||||||
if exist dist rmdir /s /q dist
|
|
||||||
if exist MRobot.spec del /f /q MRobot.spec
|
|
||||||
|
|
||||||
REM 使用 PyInstaller 打包(onedir 模式)
|
|
||||||
echo.
|
|
||||||
echo 2. 使用 PyInstaller 打包...
|
|
||||||
pyinstaller MRobot.py --onedir --windowed --icon=assets\logo\M.ico --name=MRobot --clean
|
|
||||||
|
|
||||||
if %errorlevel% neq 0 (
|
|
||||||
echo.
|
|
||||||
echo ❌ PyInstaller 打包失败!
|
|
||||||
pause
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo 3. 检查打包结果...
|
|
||||||
if not exist "dist\MRobot" (
|
|
||||||
echo ❌ 未找到 dist\MRobot 目录!
|
|
||||||
pause
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
|
|
||||||
if not exist "dist\MRobot\MRobot.exe" (
|
|
||||||
echo ❌ 未找到 MRobot.exe!
|
|
||||||
pause
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo ✅ PyInstaller 打包完成!
|
|
||||||
echo.
|
|
||||||
echo 4. 下一步:
|
|
||||||
echo - 如果要创建安装程序,请运行 Inno Setup 编译 MRobot.iss
|
|
||||||
echo - 或者直接使用 dist\MRobot 文件夹中的程序
|
|
||||||
echo.
|
|
||||||
echo ==========================================
|
|
||||||
echo 打包完成
|
|
||||||
echo ==========================================
|
|
||||||
echo.
|
|
||||||
pause
|
|
||||||
52
build.sh
52
build.sh
@ -1,52 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# MRobot 打包脚本
|
|
||||||
# 使用方法: chmod +x build.sh && ./build.sh
|
|
||||||
|
|
||||||
echo "=========================================="
|
|
||||||
echo " MRobot 打包脚本"
|
|
||||||
echo "=========================================="
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 清理旧的构建文件
|
|
||||||
echo "1. 清理旧的构建文件..."
|
|
||||||
rm -rf build dist *.spec
|
|
||||||
|
|
||||||
# 使用 PyInstaller 打包(onedir 模式)
|
|
||||||
echo ""
|
|
||||||
echo "2. 使用 PyInstaller 打包..."
|
|
||||||
pyinstaller MRobot.py \
|
|
||||||
--onedir \
|
|
||||||
--windowed \
|
|
||||||
--icon=assets/logo/M.ico \
|
|
||||||
--name=MRobot \
|
|
||||||
--clean
|
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo ""
|
|
||||||
echo "❌ PyInstaller 打包失败!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "3. 检查打包结果..."
|
|
||||||
if [ ! -d "dist/MRobot" ]; then
|
|
||||||
echo "❌ 未找到 dist/MRobot 目录!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "dist/MRobot/MRobot.exe" ]; then
|
|
||||||
echo "❌ 未找到 MRobot.exe!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "✅ PyInstaller 打包完成!"
|
|
||||||
echo ""
|
|
||||||
echo "4. 下一步:"
|
|
||||||
echo " - 如果要创建安装程序,请运行 Inno Setup 编译 MRobot.iss"
|
|
||||||
echo " - 或者直接使用 dist/MRobot 文件夹中的程序"
|
|
||||||
echo ""
|
|
||||||
echo "=========================================="
|
|
||||||
echo " 打包完成"
|
|
||||||
echo "=========================================="
|
|
||||||
Loading…
Reference in New Issue
Block a user