"""S3: 验证 alphalens 与 vnpy_sqlite(peewee) 能否共存。 vnpy.alpha dataset/template.py:13 已 `from alphalens.utils import ...`, 若 alphalens(empyrical-reloaded 要 peewee<3.17.4) 与 vnpy_sqlite(peewee 4.1.1) 冲突,vnpy.alpha 将无法 import —— 这是因子层方案 A 的前置阻塞项。 """ import sys import os _VNPY_SRC = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "vnpy_v4.4.0")) sys.path.insert(0, _VNPY_SRC) def main(): results = {} # 1. alphalens 能否 import try: from alphalens.utils import get_clean_factor_and_forward_returns from alphalens.tears import create_full_tear_sheet results["alphalens_import"] = "OK" except Exception as e: results["alphalens_import"] = f"FAIL: {type(e).__name__}: {e}" # 2. vnpy_sqlite 能否 import(peewee) try: import peewee results["peewee_version"] = peewee.__version__ from vnpy_sqlite.sqlite_database import SqliteDatabase results["vnpy_sqlite_import"] = "OK" except Exception as e: results["vnpy_sqlite_import"] = f"FAIL: {type(e).__name__}: {e}" # 3. alpha dataset 能否 import(同时拉 alphalens + vnpy) try: from vnpy.alpha.dataset import AlphaDataset results["alpha_dataset_import"] = "OK" except Exception as e: results["alpha_dataset_import"] = f"FAIL: {type(e).__name__}: {e}" print("=== S3 Spike Result ===") for k, v in results.items(): print(f" {k}: {v}") ok = all(v == "OK" or v.startswith("4") for v in results.values()) print(f"\nS3 VERDICT: {'PASS' if ok else 'FAIL/CONFLICT'}") if __name__ == "__main__": main()