181 lines
6.1 KiB
Bash
Executable File
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 "============================================================" |