"""集中化 sys.path 引导模块 在首次导入时一次性设置好编译器运行所需的 sys.path: - 项目根目录:让 ``import TransPyC``、``from StubGen import``、动态 importlib 能解析 - lib/includes:让用户注解模块中的 ``import t`` / ``import c`` 能解析 入口点(TransPyC.py / Projectrans.py)应在最开头 ``import lib._bootstrap``。 lib 内部模块也可 ``import lib._bootstrap`` 作为安全网,重复导入是无副作用的 no-op。 """ from __future__ import annotations import os import sys _BOOTSTRAPPED: bool = False def _bootstrap() -> None: global _BOOTSTRAPPED if _BOOTSTRAPPED: return _BOOTSTRAPPED = True # lib/_bootstrap.py 所在目录 _LibDir: str = os.path.dirname(os.path.abspath(__file__)) # 项目根目录 = lib 的父目录 _ProjectRoot: str = os.path.dirname(_LibDir) # lib/includes 目录(编译器内部类型系统 t.py / c.py) _IncludesDir: str = os.path.join(_LibDir, 'includes') if _ProjectRoot not in sys.path: sys.path.insert(0, _ProjectRoot) if _IncludesDir not in sys.path: sys.path.append(_IncludesDir) _bootstrap()