]> granicus.if.org Git - python/commitdiff
Issue #18157: stop using imp.load_module() in imp.
authorBrett Cannon <brett@python.org>
Tue, 11 Jun 2013 21:09:36 +0000 (17:09 -0400)
committerBrett Cannon <brett@python.org>
Tue, 11 Jun 2013 21:09:36 +0000 (17:09 -0400)
Lib/pydoc.py
Misc/NEWS

index 7505ccd2977a87fb94f9051bfb2f441614278e03..3f6fdf0b94282c5c7bbbc838f9d679f0e51cd9a0 100755 (executable)
@@ -53,6 +53,7 @@ Richard Chamberlain, for the first implementation of textdoc.
 
 import builtins
 import imp
+import importlib._bootstrap
 import importlib.machinery
 import inspect
 import io
@@ -269,18 +270,17 @@ def importfile(path):
     """Import a Python source file or compiled file given its path."""
     magic = imp.get_magic()
     with open(path, 'rb') as file:
-        if file.read(len(magic)) == magic:
-            kind = imp.PY_COMPILED
-        else:
-            kind = imp.PY_SOURCE
-        file.seek(0)
-        filename = os.path.basename(path)
-        name, ext = os.path.splitext(filename)
-        try:
-            module = imp.load_module(name, file, path, (ext, 'r', kind))
-        except:
-            raise ErrorDuringImport(path, sys.exc_info())
-    return module
+        is_bytecode = magic == file.read(len(magic))
+    filename = os.path.basename(path)
+    name, ext = os.path.splitext(filename)
+    if is_bytecode:
+        loader = importlib._bootstrap.SourcelessFileLoader(name, path)
+    else:
+        loader = importlib._bootstrap.SourceFileLoader(name, path)
+    try:
+        return loader.load_module(name)
+    except:
+        raise ErrorDuringImport(path, sys.exc_info())
 
 def safeimport(path, forceload=0, cache={}):
     """Import a module; handle errors; return None if the module isn't found.
index aa99407fe3cfa876cad2480fcc55137732ad075a..ff88878783ddc1708cbcce282d7801408b724456 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -120,6 +120,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #18157: Stop using imp.load_module() in pydoc.
+
 - Issue #16102: Make uuid._netbios_getnode() work again on Python 3.
 
 - Issue #17134: Add ssl.enum_cert_store() as interface to Windows' cert store.