# -*- coding: utf-8 -*- """测试引导:加载连字符目录为可导入包,使场景模块可复用内核组件。 - `templates/ti-cl4/llm-scenarios` → 包名 ``ti_scenarios``; - `core/llm-gateway` → 包名 ``llm_gateway``(场景依赖); - `core/rag-kb` → 包名 ``rag_kb``(场景依赖)。 与仓库内各 core 模块的测试引导同款模式;这里用 importlib 完整加载包 (执行 __init__.py),保持 ``from rag_kb import ...`` 顶层导出可用。 """ import importlib.util import os import sys SCEN_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) REPO_ROOT = os.path.dirname(os.path.dirname(os.path.dirname( os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))) def _load_package(name: str, path: str) -> None: """按文件路径完整加载一个包(执行其 __init__.py)。""" if name in sys.modules: return init_py = os.path.join(path, "__init__.py") spec = importlib.util.spec_from_file_location( name, init_py, submodule_search_locations=[path]) module = importlib.util.module_from_spec(spec) sys.modules[name] = module spec.loader.exec_module(module) _load_package("rag_kb", os.path.join(REPO_ROOT, "core", "rag-kb")) _load_package("llm_gateway", os.path.join(REPO_ROOT, "core", "llm-gateway")) _load_package("ti_scenarios", SCEN_DIR)