PyInstaller打包Python脚本后自动重启问题求助
问题描述
- 开发了一个约2000行的Python脚本,功能涵盖:查找、筛选、编辑多位置的数百个.csv/.xlsx文件,生成合并数据、统计结果等输出文件,自动生成图表与日志文件,脚本运行正常。
- 脚本通过
easygui按钮框获取用户输入启动。 - 使用PyInstaller打包为独立可执行文件,打包命令为:
PyInstaller.__main__.run(['My_script.py','--onefile','--windowed','--log-level=DEBUG', '--debug=all']) - 异常现象:脚本执行需3-5分钟,结束时通过
easygui弹窗提示执行成功,但几秒后会自动重启,只能通过关闭弹窗或后台终止程序停止。
解决方案
1. 规范主代码入口包裹
确保脚本核心逻辑放在if __name__ == '__main__':块内,避免PyInstaller打包后触发重复执行:
import easygui import sys def main(): # 主流程:获取用户输入、文件处理、生成输出等逻辑 input_choice = easygui.buttonbox("选择操作", choices=["开始处理"]) if input_choice == "开始处理": # 执行所有业务处理... # 处理完成后弹窗提示 easygui.msgbox("执行成功") # 显式终止程序 sys.exit(0) if __name__ == '__main__': main()
2. 移除调试类打包参数
打包时使用的--debug=all和--log-level=DEBUG属于调试模式参数,可能引发异常重启行为,改用发布版打包命令:
PyInstaller.__main__.run(['My_script.py','--onefile','--windowed'])
3. 在脚本结束处强制退出
在easygui成功弹窗后,直接调用sys.exit()终止程序,避免后续代码意外触发重启:
# 显示执行成功弹窗 easygui.msgbox("执行成功") # 强制退出程序 import sys sys.exit(0)
4. 排查意外循环或重启逻辑
检查脚本中是否存在以下情况:
- 主函数被循环调用
- 弹窗返回值处理逻辑错误,导致重新触发主流程
- 日志生成、文件处理模块中存在意外的重启触发点
内容的提问来源于stack exchange,提问作者GuillermoDC
相关产品推荐
相关产品推荐

