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文件:- 生成spec文件:
pyi-makespec main.py - 在spec文件的
datas项中添加web目录:datas = [('web', 'web')] - 用spec文件打包:
pyinstaller main.spec
- 生成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
相关产品推荐
相关产品推荐

