summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Lib/imp.py14
-rw-r--r--Misc/NEWS3
2 files changed, 15 insertions, 2 deletions
diff --git a/Lib/imp.py b/Lib/imp.py
index 7a7079f71d..6d156d3115 100644
--- a/Lib/imp.py
+++ b/Lib/imp.py
@@ -111,7 +111,12 @@ def load_source(name, pathname, file=None):
'importlib.machinery.SourceFileLoader(name, pathname).load_module()'
' instead')
warnings.warn(msg, DeprecationWarning, 2)
- return _LoadSourceCompatibility(name, pathname, file).load_module(name)
+ _LoadSourceCompatibility(name, pathname, file).load_module(name)
+ module = sys.modules[name]
+ # To allow reloading to potentially work, use a non-hacked loader which
+ # won't rely on a now-closed file object.
+ module.__loader__ = _bootstrap.SourceFileLoader(name, pathname)
+ return module
class _LoadCompiledCompatibility(_HackedGetData,
@@ -125,7 +130,12 @@ def load_compiled(name, pathname, file=None):
'importlib.machinery.SourcelessFileLoader(name, pathname).'
'load_module() instead ')
warnings.warn(msg, DeprecationWarning, 2)
- return _LoadCompiledCompatibility(name, pathname, file).load_module(name)
+ _LoadCompiledCompatibility(name, pathname, file).load_module(name)
+ module = sys.modules[name]
+ # To allow reloading to potentially work, use a non-hacked loader which
+ # won't rely on a now-closed file object.
+ module.__loader__ = _bootstrap.SourcelessFileLoader(name, pathname)
+ return module
def load_package(name, path):
diff --git a/Misc/NEWS b/Misc/NEWS
index 3c9f4a0a19..6e6ee2ce78 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -39,6 +39,9 @@ Core and Builtins
Library
-------
+- Issue #17358: Modules loaded by imp.load_source() and load_compiled() (and by
+ extention load_module()) now have a better chance of working when reloaded.
+
- Issue #17353: Plistlib emitted empty data tags with deeply nested datastructures
- Issue #11714: Use 'with' statements to assure a Semaphore releases a