#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 最小化SocketIO测试脚本 用于诊断PyInstaller打包后的SocketIO初始化问题 """ import sys import os import traceback print(f"Python版本: {sys.version}") print(f"工作目录: {os.getcwd()}") print(f"Python路径: {sys.path[:3]}...") # 只显示前3个路径 print("="*50) # 测试基础模块导入 try: import threading print("✓ threading模块可用") except ImportError as e: print(f"✗ threading模块不可用: {e}") try: import eventlet print("✓ eventlet模块可用") except ImportError as e: print(f"✗ eventlet模块不可用: {e}") try: import gevent print("✓ gevent模块可用") except ImportError as e: print(f"✗ gevent模块不可用: {e}") print("="*50) # 测试Flask导入 try: from flask import Flask print("✓ Flask导入成功") except ImportError as e: print(f"✗ Flask导入失败: {e}") sys.exit(1) # 测试SocketIO导入 try: from flask_socketio import SocketIO print("✓ SocketIO导入成功") except ImportError as e: print(f"✗ SocketIO导入失败: {e}") sys.exit(1) print("="*50) # 测试engineio异步驱动 try: import engineio.async_drivers.threading print("✓ engineio.async_drivers.threading可用") except ImportError as e: print(f"✗ engineio.async_drivers.threading不可用: {e}") try: import engineio.async_drivers.eventlet print("✓ engineio.async_drivers.eventlet可用") except ImportError as e: print(f"✗ engineio.async_drivers.eventlet不可用: {e}") try: import engineio.async_drivers.gevent print("✓ engineio.async_drivers.gevent可用") except ImportError as e: print(f"✗ engineio.async_drivers.gevent不可用: {e}") print("="*50) # 创建Flask应用 app = Flask(__name__) app.config['SECRET_KEY'] = 'test-key' print("测试SocketIO初始化...") # 测试1: 不指定async_mode print("\n1. 测试自动检测async_mode:") try: socketio_auto = SocketIO(app, cors_allowed_origins='*') print(f"✓ 自动检测成功,使用模式: {socketio_auto.async_mode}") except Exception as e: print(f"✗ 自动检测失败: {e}") print(f"错误详情: {traceback.format_exc()}") # 测试2: 明确指定threading模式 print("\n2. 测试threading模式:") try: socketio_threading = SocketIO(app, cors_allowed_origins='*', async_mode='threading') print(f"✓ threading模式成功,使用模式: {socketio_threading.async_mode}") except Exception as e: print(f"✗ threading模式失败: {e}") print(f"错误详情: {traceback.format_exc()}") # 测试3: 明确指定eventlet模式 print("\n3. 测试eventlet模式:") try: socketio_eventlet = SocketIO(app, cors_allowed_origins='*', async_mode='eventlet') print(f"✓ eventlet模式成功,使用模式: {socketio_eventlet.async_mode}") except Exception as e: print(f"✗ eventlet模式失败: {e}") print(f"错误详情: {traceback.format_exc()}") print("\n" + "="*50) print("测试完成!") input("按回车键退出...")