欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > Pyinstaller 打包flask_socketio为exe程序后出现:ValueError: Invalid async_mode specified

Pyinstaller 打包flask_socketio为exe程序后出现:ValueError: Invalid async_mode specified

2025/12/1 2:05:51 来源:https://blog.csdn.net/chen798213337/article/details/146974645  浏览:    关键词:Pyinstaller 打包flask_socketio为exe程序后出现:ValueError: Invalid async_mode specified

 Pyinstaller 打包flask_socketio为exe程序后出现:ValueError: Invalid async_mode specified

一、详细描述问题描述

Traceback (most recent call last):

  File "app_3.py", line 22, in <module>

  File "flask_socketio\__init__.py", line 186, in __init__

  File "flask_socketio\__init__.py", line 242, in init_app

  File "socketio\base_server.py", line 34, in __init__

  File "engineio\base_server.py", line 94, in __init__

ValueError: Invalid async_mode specified

二、解决方法

1.确认flask_socketio的版本flask_socketio version>5.x 则不需要async_mode=‘’参数。使用 pip show flask_socketio 命令查看版本,版本信息如下。

Name: Flask-SocketIO

Version: 5.5.1

可运行的最小基础代码如下,可在该代码验证环境是否正常,index.html为首页可在template文件夹中自行创建。注意allow_unsafe_werkzeug=True,这个配置必须添加。否则会出现错误。

app = Flask(__name__)
app.secret_key = 'your_secret_key'
# socketio = SocketIO(app, async_mode='eventlet') # 5.x版本已废弃该命令
socketio = SocketIO(app)

@app.route('/')
def welcome():
    return render_template('index.html')

if __name__ == '__main__':
    socketio.run(app, host='0.0.0.0', port=5000, debug=True, allow_unsafe_werkzeug=True)

index.html文件如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Welcome</title><link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body><h1>Welcome to My Flask App!</h1><p>This is a simple welcome page.</p>
</body>
</html>

2. 使用pyinstaller命令打包,这一步打包后会生成一个配置参数文件app.spec。注意确保

确保根目录下有templates, static两个文件夹。

 pyinstaller --onefile --noconsole --add-data="templates;templates" --add-data="static;static" app.py

3. 打包完成后,找到app.spec配置文件。完成如下操作:

(1)在相关的行,强制添加如下库的依赖。信息如下。

a = Analysis(
    ['app.py'],
    pathex=[],
    binaries=[],
  hiddenimports=["gevent","geventwebsocket","gevent.ssl","gevent.builtins","engineio.async_drivers.threading"],
    datas=[('templates', 'templates'), ('static', 'static')],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)

(2)修改配置,开启后台运行窗口模型

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name='app',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True, #  False -> True
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)

(3)删除原来的dist、bulid文件文件,使用 pyinstaller app.spec命令重新打包

pyinstaller app.spec

4. 打包完成后,找到app.exe文件,点击后。exe程序将以黑窗口模式后台运行。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词