Files
sanguo_vnpy/archive/2026-04-29-cleanup/scripts/utils/vnpy_app_compatibility.py
T
2026-04-29 20:15:43 +08:00

138 lines
5.2 KiB
Python
Executable File

#!/usr/bin/env python3
"""
vnpy.app 兼容性模块
用于解决 vn.py 4.x 版本中缺少 vnpy.app 模块的问题
"""
import sys
import importlib
import types
class VnpyAppCompatibility:
"""vnpy.app 兼容性层"""
def __init__(self):
self._setup_compatibility()
def _setup_compatibility(self):
"""设置兼容性层"""
# 检查是否已经存在 vnpy.app
if 'vnpy.app' in sys.modules:
print("✅ vnpy.app 模块已存在")
return
print("🔧 创建 vnpy.app 兼容性层...")
# 创建 vnpy.app 模块
vnpy_app_module = types.ModuleType('vnpy.app')
sys.modules['vnpy.app'] = vnpy_app_module
# 创建 vnpy.app.cta_strategy 子模块
cta_strategy_module = types.ModuleType('vnpy.app.cta_strategy')
sys.modules['vnpy.app.cta_strategy'] = cta_strategy_module
# 创建 vnpy.app.cta_backtester 子模块
cta_backtester_module = types.ModuleType('vnpy.app.cta_backtester')
sys.modules['vnpy.app.cta_backtester'] = cta_backtester_module
# 创建 vnpy.app.data_manager 子模块
data_manager_module = types.ModuleType('vnpy.app.data_manager')
sys.modules['vnpy.app.data_manager'] = data_manager_module
# 创建 vnpy.app.rpc_service 子模块
rpc_service_module = types.ModuleType('vnpy.app.rpc_service')
sys.modules['vnpy.app.rpc_service'] = rpc_service_module
# 映射实际模块到兼容层
self._map_modules(vnpy_app_module)
print("✅ vnpy.app 兼容性层创建完成")
def _map_modules(self, vnpy_app_module):
"""映射实际模块到兼容层"""
# 映射 vnpy_ctastrategy -> vnpy.app.cta_strategy
try:
from vnpy_ctastrategy import CtaStrategyApp, CtaTemplate
vnpy_app_module.CtaStrategyApp = CtaStrategyApp
sys.modules['vnpy.app.cta_strategy'].CtaStrategyApp = CtaStrategyApp
sys.modules['vnpy.app.cta_strategy'].CtaTemplate = CtaTemplate
print(" ✅ 映射 CtaStrategyApp")
except ImportError as e:
print(f" ⚠️ 无法导入 vnpy_ctastrategy: {e}")
# 映射 vnpy_ctabacktester -> vnpy.app.cta_backtester
try:
from vnpy_ctabacktester import CtaBacktesterApp
vnpy_app_module.CtaBacktesterApp = CtaBacktesterApp
sys.modules['vnpy.app.cta_backtester'].CtaBacktesterApp = CtaBacktesterApp
print(" ✅ 映射 CtaBacktesterApp")
except ImportError as e:
print(f" ⚠️ 无法导入 vnpy_ctabacktester: {e}")
# 映射 vnpy_datamanager -> vnpy.app.data_manager
try:
from vnpy_datamanager import DataManagerApp
vnpy_app_module.DataManagerApp = DataManagerApp
sys.modules['vnpy.app.data_manager'].DataManagerApp = DataManagerApp
print(" ✅ 映射 DataManagerApp")
except ImportError as e:
print(f" ⚠️ 无法导入 vnpy_datamanager: {e}")
# 映射 vnpy_webtrader -> vnpy.app.rpc_service (近似映射)
try:
from vnpy_webtrader import WebTraderApp
vnpy_app_module.WebTraderApp = WebTraderApp
sys.modules['vnpy.app.rpc_service'].WebTraderApp = WebTraderApp
print(" ✅ 映射 WebTraderApp")
except ImportError as e:
print(f" ⚠️ 无法导入 vnpy_webtrader: {e}")
# 映射其他常见类
try:
from vnpy.trader.engine import MainEngine
vnpy_app_module.MainEngine = MainEngine
print(" ✅ 映射 MainEngine")
except ImportError as e:
print(f" ⚠️ 无法导入 MainEngine: {e}")
try:
from vnpy.event import EventEngine
vnpy_app_module.EventEngine = EventEngine
print(" ✅ 映射 EventEngine")
except ImportError as e:
print(f" ⚠️ 无法导入 EventEngine: {e}")
def test_import(self):
"""测试导入兼容性"""
print("\n🧪 测试导入兼容性...")
tests = [
("import vnpy.app", "vnpy.app"),
("from vnpy.app.cta_strategy import CtaStrategyApp", "CtaStrategyApp"),
("from vnpy.app.cta_backtester import CtaBacktesterApp", "CtaBacktesterApp"),
("from vnpy.app.data_manager import DataManagerApp", "DataManagerApp"),
]
for import_stmt, expected in tests:
try:
exec(import_stmt)
print(f"{import_stmt}")
except Exception as e:
print(f"{import_stmt}: {e}")
# 自动启用兼容性
compatibility = VnpyAppCompatibility()
if __name__ == "__main__":
# 运行测试
compatibility.test_import()
# 显示可用的模块
print("\n📦 可用的 vnpy.app 模块:")
import vnpy.app
for attr in dir(vnpy.app):
if not attr.startswith('_'):
print(f" - {attr}")
print("\n✅ vnpy.app 兼容性层已激活")
print("现在可以正常导入 vnpy.app 相关模块了!")