Skip to content

fix: 修复 Nuitka 编译环境下程序无法启动 (issue #106) + CI 冒烟测试 + macOS 构建矩阵修复 - #107

Merged
This-is-XiaoDeng merged 3 commits into
ITCraftDevelopmentTeam:masterfrom
This-is-XiaoDeng:fix/issue-106-logger-crash
Aug 13, 2026
Merged

fix: 修复 Nuitka 编译环境下程序无法启动 (issue #106) + CI 冒烟测试 + macOS 构建矩阵修复#107
This-is-XiaoDeng merged 3 commits into
ITCraftDevelopmentTeam:masterfrom
This-is-XiaoDeng:fix/issue-106-logger-crash

Conversation

@This-is-XiaoDeng

Copy link
Copy Markdown
Member

修复内容

1. issue #106:v0.2.10 Windows exe 启动即崩溃

  • 根因utils/logger.pyget_logger() 使用 inspect.stack() / inspect.getmodule() 定位调用者模块名。在 Nuitka 编译环境下(v0.2.10 打包所用版本),inspect 获取的栈帧对象在编译后无法正确解析,模块级 logger = get_logger()(如 actions/v12/file.py)触发 AttributeError: 'dict' object has no attribute 'endswith',程序启动即崩溃
  • 修复:改用 sys._getframe(1).f_globals.get("__name__") + try/except 兜底,兼容 Nuitka 编译产物
  • 验证:本地 Nuitka 构建 + CI 冒烟测试均通过

2. CI 冒烟测试(ci.yml + build-release.yml)

  • 之前 CI 只编译不运行,无法保证产物可启动
  • 所有平台构建完成后:用临时 config.json 真实启动产物 → 校验启动横幅 + Discord 登录阶段日志 → 通过才算构建成功
  • Windows 设置 PYTHONUTF8=1

3. macOS 构建矩阵修复

  • macos-latest 已变为 arm64,原 x64 条目实际产出 arm64 二进制(python-arch 从未生效)
  • 修复:x64 → macos-26-intel,arm64 → macos-latest,并在 setup-python 中显式传入 architecture
  • 验证:CI 产物 file 确认 x64 条目为 Mach-O 64-bit x86_64

4. 日志中文转义修复

  • 非 UTF-8 locale(英文 Windows 重定向输出、POSIX 环境)下,日志中文会被转义为 \uXXXX
  • init_logger 强制 stdout/stderr 使用 UTF-8;冒烟测试断言改用 ASCII 安全文本

验证记录

  • fork 上 Dev CI 全平台冒烟测试通过(linux ✅ windows ✅ macos-arm64 ✅ macos-x64 ✅)
  • fork 上 Release 工作流完整路径(构建→冒烟→上传资产)通过
  • 本地运行 CI 产物:正常启动、打印版本、全部插件加载完成

Closes #106

…elopmentTeam#106)

- utils/logger.py: 用 sys._getframe(1).f_globals['__name__'] 获取调用方模块名,
  替代 inspect.stack()/inspect.getmodule()。Nuitka 编译模块没有真实源码文件,
  inspect 会抛 AttributeError: 'dict' object has no attribute 'endswith' 使程序
  在启动阶段崩溃(Windows 用户报告 v0.2.10 无法启动)
- version.py: 打包后 pyproject.toml 作为数据文件解压到可执行文件所在目录,
  依次尝试多个候选路径读取版本号,避免打包后显示 FAILED TO GET
- CI: ci.yml / build-release.yml 各平台构建后新增冒烟测试(临时 config.json
  启动产物,检查启动横幅与版本输出),确保发布的程序可运行
- 新增 CLAUDE.md 项目开发指南(构建、发版、编码规范)
macos-latest 已变为 arm64 运行器,原矩阵中 x64 条目从未真正构建 x64 产物
(python-arch 未传给 setup-python,runs-on 固定为 macos-latest),导致
"x64" 产物实际是 arm64。改为:x64 使用 macos-26-intel(Intel 运行器),
arm64 使用 macos-latest,并把 architecture 传给 setup-python。
- 非 UTF-8 locale(英文 Windows 重定向输出、POSIX 环境)下,日志中的中文会被
  Python 转义为 \uXXXX(Nuitka 打包后同样如此),导致日志不可读
- init_logger 中对 sys.stdout/sys.stderr 执行 reconfigure(encoding='utf-8')
- 冒烟测试断言改为 ASCII 安全文本(启动横幅 + discord login 阶段日志),
  避免依赖中文编码,保证 CI 在 Windows runner(cp1252)上稳定通过
@github-actions
github-actions Bot requested a review from montmorill August 13, 2026 04:26
@This-is-XiaoDeng
This-is-XiaoDeng merged commit 91e1304 into ITCraftDevelopmentTeam:master Aug 13, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0.2.10无法启动

1 participant