133 lines
4.2 KiB
Python
Executable File
133 lines
4.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
创建 vnpy.app 兼容性模块
|
|
解决 vn.py 4.x 中缺少 vnpy.app 模块的问题
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
import types
|
|
|
|
def create_vnpy_app_module():
|
|
"""创建 vnpy.app 模块"""
|
|
|
|
# 检查是否已存在
|
|
if 'vnpy.app' in sys.modules:
|
|
print("✅ vnpy.app 模块已存在")
|
|
return
|
|
|
|
print("🔧 创建 vnpy.app 兼容性模块...")
|
|
|
|
# 创建 vnpy.app 顶级模块
|
|
vnpy_app = types.ModuleType('vnpy.app')
|
|
sys.modules['vnpy.app'] = vnpy_app
|
|
|
|
# 创建子模块
|
|
submodules = ['cta_strategy', 'cta_backtester', 'data_manager', 'rpc_service']
|
|
|
|
for submodule_name in submodules:
|
|
full_name = f'vnpy.app.{submodule_name}'
|
|
submodule = types.ModuleType(full_name)
|
|
sys.modules[full_name] = submodule
|
|
setattr(vnpy_app, submodule_name, submodule)
|
|
print(f" ✅ 创建子模块: {full_name}")
|
|
|
|
# 从实际模块导入并映射
|
|
try:
|
|
from vnpy_ctastrategy import CtaTemplate, CtaStrategyApp
|
|
sys.modules['vnpy.app.cta_strategy'].CtaTemplate = CtaTemplate
|
|
sys.modules['vnpy.app.cta_strategy'].CtaStrategyApp = CtaStrategyApp
|
|
vnpy_app.CtaTemplate = CtaTemplate
|
|
vnpy_app.CtaStrategyApp = CtaStrategyApp
|
|
print(" ✅ 映射: CtaTemplate, CtaStrategyApp")
|
|
except ImportError as e:
|
|
print(f" ❌ 无法导入 vnpy_ctastrategy: {e}")
|
|
|
|
try:
|
|
from vnpy_ctabacktester import CtaBacktesterApp
|
|
sys.modules['vnpy.app.cta_backtester'].CtaBacktesterApp = CtaBacktesterApp
|
|
vnpy_app.CtaBacktesterApp = CtaBacktesterApp
|
|
print(" ✅ 映射: CtaBacktesterApp")
|
|
except ImportError as e:
|
|
print(f" ❌ 无法导入 vnpy_ctabacktester: {e}")
|
|
|
|
try:
|
|
from vnpy_datamanager import DataManagerApp
|
|
sys.modules['vnpy.app.data_manager'].DataManagerApp = DataManagerApp
|
|
vnpy_app.DataManagerApp = DataManagerApp
|
|
print(" ✅ 映射: DataManagerApp")
|
|
except ImportError as e:
|
|
print(f" ❌ 无法导入 vnpy_datamanager: {e}")
|
|
|
|
try:
|
|
from vnpy_webtrader import WebTraderApp
|
|
sys.modules['vnpy.app.rpc_service'].WebTraderApp = WebTraderApp
|
|
vnpy_app.WebTraderApp = WebTraderApp
|
|
print(" ✅ 映射: WebTraderApp")
|
|
except ImportError as e:
|
|
print(f" ❌ 无法导入 vnpy_webtrader: {e}")
|
|
|
|
# 添加其他常用模块
|
|
try:
|
|
from vnpy.trader.engine import MainEngine
|
|
vnpy_app.MainEngine = MainEngine
|
|
print(" ✅ 映射: MainEngine")
|
|
except ImportError as e:
|
|
print(f" ❌ 无法导入 MainEngine: {e}")
|
|
|
|
try:
|
|
from vnpy.event import EventEngine
|
|
vnpy_app.EventEngine = EventEngine
|
|
print(" ✅ 映射: EventEngine")
|
|
except ImportError as e:
|
|
print(f" ❌ 无法导入 EventEngine: {e}")
|
|
|
|
print("✅ vnpy.app 兼容性模块创建完成")
|
|
|
|
def test_imports():
|
|
"""测试导入"""
|
|
print("\n🧪 测试导入...")
|
|
|
|
test_cases = [
|
|
("import vnpy.app", None),
|
|
("from vnpy.app.cta_strategy import CtaTemplate", "CtaTemplate"),
|
|
("from vnpy.app.cta_strategy import CtaStrategyApp", "CtaStrategyApp"),
|
|
("from vnpy.app.cta_backtester import CtaBacktesterApp", "CtaBacktesterApp"),
|
|
]
|
|
|
|
for import_stmt, expected in test_cases:
|
|
try:
|
|
exec(import_stmt)
|
|
if expected:
|
|
print(f" ✅ {import_stmt} -> {expected}")
|
|
else:
|
|
print(f" ✅ {import_stmt}")
|
|
except Exception as e:
|
|
print(f" ❌ {import_stmt}: {e}")
|
|
|
|
def main():
|
|
"""主函数"""
|
|
print("🚀 创建 vnpy.app 兼容性模块")
|
|
print("=" * 60)
|
|
|
|
# 创建模块
|
|
create_vnpy_app_module()
|
|
|
|
# 测试导入
|
|
test_imports()
|
|
|
|
# 显示可用模块
|
|
print("\n📦 可用的 vnpy.app 模块:")
|
|
try:
|
|
import vnpy.app
|
|
for attr in dir(vnpy.app):
|
|
if not attr.startswith('_'):
|
|
print(f" - {attr}")
|
|
except Exception as e:
|
|
print(f" ❌ 无法导入 vnpy.app: {e}")
|
|
|
|
print("\n✅ 兼容性模块创建完成!")
|
|
print("现在可以正常使用 'from vnpy.app.cta_strategy import CtaTemplate' 了")
|
|
|
|
if __name__ == "__main__":
|
|
main() |