Concerns about `-X lazy_imports=none`

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
        }
1 Like