138 lines
5.2 KiB
Python
Executable File
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 相关模块了!") |