BodyBalanceEvaluation/backend/test_socketio_minimal.py

112 lines
3.0 KiB
Python
Raw Normal View History

2025-08-13 14:17:50 +08:00
#!/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("按回车键退出...")