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

PyInstaller打包Eel脚本为exe后控制台闪退,WebSocket连接中断求助

Eel + PyInstaller打包后WebSocket连接中断问题解决建议

问题现象

  • 使用命令 python -m eel main.py web 打包仅出现警告无错误
  • 生成的exe运行时控制台启动缓慢,Chrome网页打开后几秒控制台自动关闭,页面控制台提示 WebSocket is already in CLOSING or CLOSED state
  • 代码在PyCharm中运行完全正常

解决建议

  • 显式指定Eel端口与进程退出延迟
    在Python代码的eel.start()中手动指定端口,并添加进程退出延迟,避免主线程提前终止导致WebSocket连接中断:

    import time
    eel.start('index.html', port=8080, close_callback=lambda: time.sleep(5))
    

    也可显式设置block=True(默认值,但打包后显式指定更稳妥),确保主线程持续运行。

  • 调整打包命令参数
    改用更精细的打包参数,确保web资源被正确打包,同时避免控制台异常退出:

    python -m eel main.py web --onefile --add-data "web/*;web/"
    

    若不需要控制台窗口,可添加--noconsole参数。如果需要更灵活的控制,可手动生成并修改PyInstaller spec文件:

    1. 生成spec文件:pyi-makespec main.py
    2. 在spec文件的datas项中添加web目录:
      datas = [('web', 'web')]
      
    3. 用spec文件打包:pyinstaller main.spec
  • 修正网页端Eel初始化配置
    在HTML的Eel初始化代码中,显式指定与Python代码一致的端口,避免打包后自动端口识别异常:

    <script type="text/javascript" src="/eel.js"></script>
    <script>
      eel.init({host: 'localhost', port: 8080});
    </script>
    
  • 禁用Chrome沙箱模式
    打包后Chrome启动可能因沙箱模式触发异常,在eel.start()中添加Chrome启动参数:

    eel.start('index.html', chrome_flags=['--no-sandbox', '--disable-gpu'])
    
  • 处理打包日志中的警告
    检查打包日志中的警告信息,若存在模块缺失提示,手动添加到hidden imports中。例如在spec文件中:

    hiddenimports = ['eel', 'bottle', 'gevent']
    

    或通过命令行参数添加:--hidden-import eel --hidden-import bottle

内容的提问来源于stack exchange,提问作者golfinLP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:25:15