mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
This commit is contained in:
parent
dcdd05b0b4
commit
cdf601281f
5 changed files with 642 additions and 507 deletions
|
@ -107,7 +107,7 @@ def reload(module):
|
|||
if not module or not isinstance(module, types.ModuleType):
|
||||
raise TypeError("reload() argument must be module")
|
||||
name = module.__name__
|
||||
if name not in sys.modules:
|
||||
if sys.modules.get(name) is not module:
|
||||
msg = "module {} not in sys.modules"
|
||||
raise ImportError(msg.format(name), name=name)
|
||||
if name in _RELOADING:
|
||||
|
@ -118,7 +118,11 @@ def reload(module):
|
|||
if parent_name and parent_name not in sys.modules:
|
||||
msg = "parent {!r} not in sys.modules"
|
||||
raise ImportError(msg.format(parent_name), name=parent_name)
|
||||
module.__loader__.load_module(name)
|
||||
loader = _bootstrap._find_module(name, None)
|
||||
if loader is None:
|
||||
raise ImportError(_bootstrap._ERR_MSG.format(name), name=name)
|
||||
module.__loader__ = loader
|
||||
loader.load_module(name)
|
||||
# The module may have replaced itself in sys.modules!
|
||||
return sys.modules[module.__name__]
|
||||
finally:
|
||||
|
|
|
@ -1510,15 +1510,19 @@ def _find_module(name, path):
|
|||
"""Find a module's loader."""
|
||||
if not sys.meta_path:
|
||||
_warnings.warn('sys.meta_path is empty', ImportWarning)
|
||||
is_reload = name in sys.modules
|
||||
for finder in sys.meta_path:
|
||||
with _ImportLockContext():
|
||||
loader = finder.find_module(name, path)
|
||||
if loader is not None:
|
||||
# The parent import may have already imported this module.
|
||||
if name not in sys.modules:
|
||||
if is_reload or name not in sys.modules:
|
||||
return loader
|
||||
else:
|
||||
return sys.modules[name].__loader__
|
||||
try:
|
||||
return sys.modules[name].__loader__
|
||||
except AttributeError:
|
||||
return loader
|
||||
else:
|
||||
return None
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue