GPTCache
1import importlib
2from types import ModuleType
3
4
5class LazyImport(ModuleType):
6"""
7Lazily import a module.
8"""
9
10def __init__(self, local_name, parent_module_globals, name):
11self._local_name = local_name
12self._parent_module_globals = parent_module_globals
13super().__init__(name)
14
15def _load(self):
16module = importlib.import_module(self.__name__)
17self._parent_module_globals[self._local_name] = module
18self.__dict__.update(module.__dict__)
19return module
20
21def __getattr__(self, item):
22module = self._load()
23return getattr(module, item)
24
25def __dir__(self):
26module = self._load()
27return dir(module)
28