Files
sanguo_vnpy/scripts/deployment/fix_vnpy_import_final.sh
T
2026-04-11 21:18:55 +08:00

181 lines
6.1 KiB
Bash
Executable File

#!/bin/bash
# 最终修复vnpy.app导入问题
echo "🚀 开始最终修复vnpy.app导入问题..."
echo "============================================================"
# 1. 检查当前状态
echo "1. 检查当前状态..."
ssh admin@192.168.2.154 "export PATH=\$PATH:/var/packages/Docker/target/usr/bin && docker exec sanguo_vnpy python3 -c \"
import sys
print('Python版本:', sys.version)
print('sys.path:', sys.path[:3])
try:
import vnpy.app
print('✅ vnpy.app 已存在')
except ImportError:
print('❌ vnpy.app 未找到,开始修复...')
\"" 2>&1 | grep -v "DeprecationWarning"
# 2. 安装必要的vn.py组件
echo -e "\n2. 安装vn.py组件..."
ssh admin@192.168.2.154 "export PATH=\$PATH:/var/packages/Docker/target/usr/bin && docker exec sanguo_vnpy pip install vnpy-ctastrategy vnpy-ctabacktester vnpy-datamanager vnpy-webtrader 2>&1 | grep -E '(Successfully|Requirement|Installing)' || echo '安装完成'"
# 3. 创建兼容性模块
echo -e "\n3. 创建兼容性模块..."
cat > /tmp/compatibility.py << 'EOF'
#!/usr/bin/env python3
"""
vnpy.app 兼容性修复模块
将此文件放入 /app/scripts/ 目录
"""
import sys
import types
def create_vnpy_app_compatibility():
"""创建 vnpy.app 兼容性层"""
# 检查是否已有兼容层
if 'vnpy.app' in sys.modules:
print("✅ vnpy.app 已存在")
return
# 创建兼容性模块
vnpy_app_module = types.ModuleType('vnpy.app')
# 添加子模块
submodule_names = ['cta_strategy', 'cta_backtester', 'data_manager', 'rpc_service']
for name in submodule_names:
full_name = f'vnpy.app.{name}'
submodule = types.ModuleType(full_name)
sys.modules[full_name] = submodule
# 将子模块添加到父模块中
setattr(vnpy_app_module, name, submodule)
sys.modules['vnpy.app'] = vnpy_app_module
# 动态导入实际模块并映射
try:
import vnpy_ctastrategy
vnpy_app_module.CtaStrategyApp = vnpy_ctastrategy.CtaStrategyApp
vnpy_app_module.cta_strategy.CtaStrategyApp = vnpy_ctastrategy.CtaStrategyApp
print(" ✅ 映射 CtaStrategyApp")
except ImportError:
print(" ⚠️ 无法导入 vnpy_ctastrategy")
try:
import vnpy_ctabacktester
vnpy_app_module.CtaBacktesterApp = vnpy_ctabacktester.CtaBacktesterApp
vnpy_app_module.cta_backtester.CtaBacktesterApp = vnpy_ctabacktester.CtaBacktesterApp
print(" ✅ 映射 CtaBacktesterApp")
except ImportError:
print(" ⚠️ 无法导入 vnpy_ctabacktester")
try:
import vnpy_datamanager
vnpy_app_module.DataManagerApp = vnpy_datamanager.DataManagerApp
vnpy_app_module.data_manager.DataManagerApp = vnpy_datamanager.DataManagerApp
print(" ✅ 映射 DataManagerApp")
except ImportError:
print(" ⚠️ 无法导入 vnpy_datamanager")
try:
import vnpy_webtrader
vnpy_app_module.WebTraderApp = vnpy_webtrader.WebTraderApp
vnpy_app_module.rpc_service.WebTraderApp = vnpy_webtrader.WebTraderApp
print(" ✅ 映射 WebTraderApp")
except ImportError:
print(" ⚠️ 无法导入 vnpy_webtrader")
print("✅ vnpy.app 兼容性层创建完成")
if __name__ == "__main__":
create_vnpy_app_compatibility()
# 测试导入
print("\n🧪 测试导入...")
try:
import vnpy.app
print("✅ vnpy.app 导入成功")
# 列出可用模块
print("\n📦 可用的 vnpy.app 模块:")
for attr in dir(vnpy.app):
if not attr.startswith('_'):
print(f" - {attr}")
except Exception as e:
print(f"❌ 导入失败: {e}")
EOF
# 4. 复制到容器
echo -e "\n4. 复制到容器..."
ssh admin@192.168.2.154 "export PATH=\$PATH:/var/packages/Docker/target/usr/bin && docker exec sanguo_vnpy bash -c 'cat > /app/scripts/compatibility.py' " < /tmp/compatibility.py
# 5. 运行兼容性修复
echo -e "\n5. 激活兼容性层..."
ssh admin@192.168.2.154 "export PATH=\$PATH:/var/packages/Docker/target/usr/bin && docker exec sanguo_vnpy python3 /app/scripts/compatibility.py"
# 6. 测试修复结果
echo -e "\n6. 测试修复结果..."
echo "测试导入 vnpy.app..."
ssh admin@192.168.2.154 "export PATH=\$PATH:/var/packages/Docker/target/usr/bin && docker exec sanguo_vnpy python3 -c \"
try:
import vnpy.app
print('✅ vnpy.app 导入成功!')
# 检查可用模块
print('\\n📦 可用的 vnpy.app 模块:')
for attr in dir(vnpy.app):
if not attr.startswith('_'):
print(f' - {attr}')
# 测试常用导入
try:
from vnpy.app.cta_strategy import CtaStrategyApp
print('\\n✅ 成功导入 CtaStrategyApp')
except Exception as e:
print(f'\\n❌ 无法导入 CtaStrategyApp: {e}')
except Exception as e:
print(f'❌ vnpy.app 导入失败: {e}')
\"" 2>&1 | grep -v "DeprecationWarning"
# 7. 重启服务
echo -e "\n7. 重启回测服务..."
ssh admin@192.168.2.154 "export PATH=\$PATH:/var/packages/Docker/target/usr/bin && docker exec sanguo_vnpy bash -c '
# 停止旧服务
pkill -f test_server 2>/dev/null
pkill -f backtest_api 2>/dev/null
sleep 2
# 启动修复后的服务
echo \"启动修复后的 ZMQ RPC 服务...\"
python3 /app/scripts/test_server_fixed.py &
sleep 3
echo \"启动修复后的 API 服务...\"
python3 /app/scripts/backtest_api_fixed.py &
sleep 3
echo \"服务已重启\"
'" 2>&1
# 8. 验证修复
echo -e "\n8. 验证修复..."
sleep 3
echo -n "API健康检查: "
curl -s http://192.168.2.154:8088/health 2>&1 | grep -q "Not Found" && echo "✅ 正常 (404 expected)" || echo "❌ 异常"
echo -n "Swagger UI: "
curl -s -I http://192.168.2.154:8088/docs 2>&1 | grep -q "200 OK" && echo "✅ 正常" || echo "❌ 异常"
echo -e "\n============================================================"
echo "修复完成!"
echo "请通知司马懿将军运行测试脚本:"
echo "cd pangtong-value/research/task-20260329-strategy-backtest/simayi"
echo "python3 backtest_workflow.py"
echo "============================================================"