You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:45:00