Repository navigation
Build Deploy
HiLodve edited this page Jun 29, 2026
·
1 revision
GFAM GUI 通过 PyInstaller 打包为单文件 exe。
- Python 3.11+
- PyInstaller(
pip install pyinstaller) - 构建前需关闭正在运行的 GFAM GUI(否则 DLL 文件被锁定)
# 一键构建
build_gfam_gui_exe.bat
# 或手动执行
python tools/build_gfam_gui_exe.pydef add_data_arg(src, dest):
"""添加数据文件参数"""
def build():
"""执行 PyInstaller 构建"""
# 入口: tools/gfam_gui_launcher.py
# 输出: dist/GFAM-GUI/GFAM-GUI.exe
# 包含: modules/*.py, libs/ZIRC/**, data/*.json, assets/*.png, assets/gfam.icodist/GFAM-GUI/
├── GFAM-GUI.exe ← 用户双击运行
└── _internal/
├── modules/ ← 后端 .py 文件(运行时加载)
├── libs/ZIRC/ ← gflzirc 通信库
├── data/ ← 数据字典
└── assets/ ← 图标和图片资源
-
纯后端修改(modules/*.py):直接
cp到dist/GFAM-GUI/_internal/modules/,无需重新编译 -
GUI 修改(tools/gfam_gui_launcher.py):必须重新运行
build_gfam_gui_exe.bat
GUI exe 的 _internal 目录包含 python311.dll。如果子进程继承了包含此目录的 PATH,可能加载错误的 DLL 版本。gfam_gui_launcher.py 在 _launch_gfam_backend() 中处理:
- 从子进程 PATH 中移除 exe 所在目录
- 清除
_MEIPASS/_MEIPASS2环境变量
python tools/build_portable_package.py生成包含所有必要文件的 zip 包,用户解压即可运行。
1. 执行 setup_windows.ps1 → 环境检查
2. 启动 main.js → 交互式主菜单
3. main.js 退出码 77 → 读取 .gfam_next_module.cmd
4. 设置 PYTHONPATH 包含 gflzirc
5. 可选启动妖精后台(start_gfam_background.ps1)
6. 可选启动制造后台
7. 运行选定模块(python -u modules/<file>.py)
8. 模块退出 → 停止后台进程 → 返回主菜单
1. 检测 Node.js → 缺失则 winget 安装 OpenJS.NodeJS.LTS
2. 检测 Python/py → 缺失则 winget 安装 Python.Python.3.11
3. 检测 requests 依赖 → 缺失则 pip install(失败不阻断)
4. 验证 gflzirc 存在
关键设计:requests 安装失败为警告而非错误,因为 GFAM 主要依赖内置 gflzirc。
使用 Start-Process -WindowStyle Hidden 启动后台 Python 进程,写入 PID 文件供 GUI 追踪。
.github/workflows/gfam-manual.yml
手动触发(workflow_dispatch),通过 GitHub Web UI 或 API。
| 参数 | 类型 | 选项 |
|---|---|---|
module |
choice | greyzone, 13-4-train, 13-4-resource, a10-resource, f2p, f2p_pr, smart-gun, smart-equip, pick_and_train |
server |
choice | SOP, RO635, M4A1, M16, AR-15, EN |
fairy |
boolean | 启用妖精自动 |
ticket_type |
choice | default, ticket1, ticket2 |
train_team_count |
string | 练级梯队数(默认 1) |
run_minutes |
string | 运行时长(默认 30 分钟) |
compact_log |
boolean | 精简日志(默认 true) |
| Secret | 说明 |
|---|---|
GFAM_USER_UID |
游戏 UID |
GFAM_SIGN_KEY |
签名密钥 |
1. checkout 代码
2. 安装 Python 3.11
3. pip install -r requirements-gha.txt
4. 验证 GFAM_USER_UID 和 GFAM_SIGN_KEY
5. 运行 gha_manual_runner.py(带全部参数)
| 文件 | 行数 | 用途 |
|---|---|---|
gfam_gha.py |
276 | GHA/Linux 启动器入口 |
gha_manual_runner.py |
974 | 非交互式 GHA 控制器 |
gha_manual_runner.py 通过 stdin 向模块注入预设命令序列,模拟用户交互。支持精简日志模式(隐藏仪表盘和高频循环输出)。
- 任务超时:360 分钟
- 并发控制:
gfam-${repository}-${server}(同一仓库+服务器不并发) - 不取消进行中的任务
发布前需确认(参考 docs/PUBLIC_RELEASE_CHECKLIST.txt):
- 不包含真实 UID/SIGN/Index 响应
- 不包含
.gfam_auth.json等凭证文件 -
.gitignore排除所有运行时缓存和敏感文件 - gflzirc 库完整包含在
libs/ZIRC/ -
data/中的字典文件为静态数据,不含用户数据 - README 中所有示例使用占位值