76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
import sys
|
||
from pathlib import Path
|
||
|
||
|
||
def get_project_root():
|
||
"""
|
||
获取项目根路径(strategy_manager 的父目录)
|
||
项目结构:
|
||
project/
|
||
├── futures_trading_strategies/
|
||
└── strategy_manager/
|
||
"""
|
||
# strategy_manager/core/path_utils.py -> strategy_manager -> project
|
||
return Path(__file__).parent.parent.parent
|
||
|
||
|
||
def get_strategy_root(config_path: str = "config/main.json"):
|
||
"""
|
||
动态获取策略代码根路径
|
||
优先级:
|
||
1. config/main.json 中配置的绝对路径
|
||
2. config/main.json 中配置的相对路径(相对于项目根)
|
||
3. AUTO_DETECT: 自动探测项目根目录下的 futures_trading_strategies
|
||
"""
|
||
config_file = Path(config_path)
|
||
strategy_root = None
|
||
|
||
# 读取配置
|
||
if config_file.exists():
|
||
import json
|
||
try:
|
||
with open(config_file, 'r') as f:
|
||
config = json.load(f)
|
||
strategy_root = config.get("strategy_root", "AUTO_DETECT")
|
||
except:
|
||
strategy_root = "AUTO_DETECT"
|
||
else:
|
||
strategy_root = "AUTO_DETECT"
|
||
|
||
# 如果是绝对路径,直接返回
|
||
if strategy_root and Path(strategy_root).is_absolute():
|
||
return Path(strategy_root)
|
||
|
||
# 如果是相对路径,相对于项目根
|
||
project_root = get_project_root()
|
||
if strategy_root and strategy_root != "AUTO_DETECT":
|
||
return project_root / strategy_root
|
||
|
||
# AUTO_DETECT模式: 探测项目根目录下的 futures_trading_strategies
|
||
auto_detect = project_root / "futures_trading_strategies"
|
||
if auto_detect.exists():
|
||
return auto_detect
|
||
|
||
# 如果失败,抛出错误
|
||
raise RuntimeError(
|
||
"无法自动探测策略代码路径,请在 config/main.json 中配置:\n"
|
||
'"strategy_root": "/path/to/your/futures_trading_strategies"'
|
||
)
|
||
|
||
|
||
def add_project_root_to_path():
|
||
"""将项目根路径添加到 sys.path"""
|
||
project_root = get_project_root()
|
||
if str(project_root) not in sys.path:
|
||
sys.path.insert(0, str(project_root))
|
||
print(f"[INFO] 已添加项目根路径到sys.path: {project_root}")
|
||
return project_root
|
||
|
||
|
||
def add_strategy_root_to_path():
|
||
"""将策略根路径添加到 sys.path"""
|
||
strategy_root = get_strategy_root()
|
||
if str(strategy_root) not in sys.path:
|
||
sys.path.insert(0, str(strategy_root))
|
||
print(f"[INFO] 已添加策略根路径到sys.path: {strategy_root}")
|
||
return strategy_root |