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