initial-import: 2026-04-11 21:18:55
This commit is contained in:
Executable
+181
@@ -0,0 +1,181 @@
|
||||
#!/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 "============================================================"
|
||||
Reference in New Issue
Block a user