SuperAPI AI 工具集

lazy-import-refactor

编程与开发

查看项目

更新于 10-15 21:33

技能介绍

用途:把模块级 import torch / import tensorflow 等重型原生依赖迁移为函数内部惰性导入,适用于 import 单个库即触发 SIGSEGV(如无 CUDA 驱动加 triton C 扩展段错误)、需缩短启动时间、或让仅用 WebAPI 的使用者不必加载重型依赖的场景。

主要能力:提供分步流程。第一步用 grep 找出所有模块级导入及测试中 @patch 该模块属性的位置,因为导入移入函数后模块属性消失,相关测试会因 AttributeError 失败。第二步重构:在文件顶部加 from future import annotations,用 TYPE_CHECKING 保留类型导入,在运行时函数开头重新 import torch,并删除模块级裸导入。第三步处理测试副作用,改用 monkeypatch.setitem(sys.modules, "torch", MagicMock())。第四步用与 CI 完全一致的 filter 本地验证,例如 uv run pytest -m "not downloads_and_runs_model and not calls_real_webapi",短 filter 不足以复现子模块标记差异。第五步跨仓库 PR 顺序:先在库侧修复并通过 CI 等价测试,合并后再更新下游 submodule pin。

限制与注意:间接导入重型依赖的上游库(如 transformers 会急切加载 torch)同样需惰性化;仅靠 TYPE_CHECKING 无法覆盖 cast、isinstance 等运行时求值;应同 PR 增加子进程回归测试验证惰性生效;具体 hook 与规则文件内容以项目实际为准,资料未提供更多细节。