海狸 (@Beaver) 在 记录一下PyInstaller + GUI 脚本执行踩坑全记录 中发帖
最近在做一个 PyInstaller 打包 + tkinter GUI 的项目,踩了不少坑,整理出来给佬们避雷。
背景
项目结构大致是:GUI 主程序负责界面和交互,动态执行一个打包进去的 Python 脚本,
脚本的 sys.stdout / sys.stderr 重定向到 GUI 的文本框。
看起来简单,但联调过程中几乎每一个环节都出了幺蛾子。
Q1 PermissionError / RuntimeError:无法获取脚本内容
现象:打包后运行报 PermissionError: Permission denied 或
RuntimeError: 无法获取脚本内容。
原因:PyInstaller onefile 模式下,_MEIPASS 是只读内存映射,
用 open() 直接读取其中的文件会失败。
解法:改用嵌入脚本方案,把脚本内容写成一个 Python 模块
...