Currently sys.lazy_modules doesn’t actually provide the lazy_import objects, just some names.
import sys
lazy import typing
lazy import collections.abc
lazy from inspect import signature
print(sys.lazy_modules)
{'collections': {'abc'}, 'inspect': {'signature'}}
The other problem is that performing an import on one module can create new lazy imports.
I think something that might work would be:
import sys
import types
def resolve_all_lazy_imports():
new_modules = sys.modules.copy()
seen_modules = set()
while new_modules:
for module_name, module in new_modules.items():
for name, obj in module.__dict__.items():
if isinstance(obj, types.LazyImportType):
module.__dict__[name] = obj.resolve()
seen_modules.add(module_name)
# New modules may now have lazy imports
new_modules = {
k: v for k, v in sys.modules.items() if k not in seen_modules
}