"""PL 注入 - 向插件加载器注册依赖自动安装功能 此文件通过 PL 注入机制向插件加载器注册以下功能: - auto-dependency:scan: 扫描所有插件的系统依赖声明 - auto-dependency:check: 检查系统依赖是否已安装 - auto-dependency:install: 自动安装缺失的系统依赖 - auto-dependency:info: 获取插件系统信息 """ def register(injector): """向插件加载器注册功能 Args: injector: PLInjector 实例,提供 register_function 等方法 """ # 注意:实际的功能实现由 main.py 中的 AutoDependencyPlugin 提供 # 这里我们通过导入插件实例来注册功能 import sys from pathlib import Path # 获取当前插件目录 current_file = Path(__file__) plugin_dir = current_file.parent.parent # 导入插件主模块 main_file = plugin_dir / "main.py" # 创建安全的执行环境来加载插件 safe_globals = { "__builtins__": { "True": True, "False": False, "None": None, "dict": dict, "list": list, "str": str, "int": int, "float": float, "bool": bool, "tuple": tuple, "set": set, "len": len, "range": range, "enumerate": enumerate, "zip": zip, "map": map, "filter": filter, "sorted": sorted, "reversed": reversed, "min": min, "max": max, "sum": sum, "abs": abs, "round": round, "isinstance": isinstance, "issubclass": issubclass, "type": type, "id": id, "hash": hash, "repr": repr, "print": print, "object": object, "property": property, "staticmethod": staticmethod, "classmethod": classmethod, "super": super, "iter": iter, "next": next, "any": any, "all": all, "callable": callable, "hasattr": hasattr, "getattr": getattr, "setattr": setattr, "Exception": Exception, "BaseException": BaseException, }, "__name__": "plugin.auto-dependency", "__package__": "plugin.auto-dependency", "__file__": str(main_file), "Path": Path, } try: with open(main_file, "r", encoding="utf-8") as f: source = f.read() code = compile(source, str(main_file), "exec") exec(code, safe_globals) # 获取 New 函数并创建插件实例 new_func = safe_globals.get("New") if new_func and callable(new_func): plugin_instance = new_func() # 初始化插件 plugin_instance.init({ "scan_dirs": ["store"], "auto_install": True }) # 使用插件实例注册 PL 功能 plugin_instance.register_pl_functions(injector) except Exception as e: print(f"[auto-dependency] PL 注册失败:{e}")