initial-import: 2026-04-11 21:18:55
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
#!/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 相关模块了!")
|
||||
Reference in New Issue
Block a user