@@ -71,21 +71,25 @@ def lazy_import(name, globals=None, locals=None, fromlist=(), level=0):
7171 ** {from_item : self ._lazy_modules [f"{ module_name } .{ from_item } " ] for from_item in fromlist }
7272 )
7373 else :
74- if module_name not in self ._lazy_modules :
74+ if module_name in globals :
75+ self ._lazy_modules [module_name ] = globals [module_name ]
76+ elif module_name in sys .modules :
77+ self ._lazy_modules [module_name ] = sys .modules [module_name ] # module already loaded in session
78+ elif module_name not in self ._lazy_modules :
7579 self ._lazy_modules [module_name ] = LazyLoader (module_name )
80+
81+ if "." in name : # we need to send loader for parent before subpackage
82+ parts = name .split ('.' )
83+ parent = ['.' .join (parts [:i ]) for i in range (1 , len (parts ))][0 ]
84+ return LazyLoader (parent )
85+
7686 return self ._lazy_modules [module_name ]
7787
7888 builtins .__import__ = lazy_import
79- return self
8089
8190 def __exit__ (self , * args ):
8291 """Restores the original import mechanism and updates sys.modules with any loaded lazy modules."""
8392 builtins .__import__ = self ._original_import
84- # Now that builtins is restored, we can load any modules that need loading
85- for name , lazy_module in self ._lazy_modules .items ():
86- if name in sys .modules : # Update sys.modules to avoid issues with subsequent imports
87- sys .modules [name ] = lazy_module
88-
8993
9094if __name__ == "__main__" :
9195 import time
0 commit comments