summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xLib/pydoc.py24
-rw-r--r--Misc/NEWS2
2 files changed, 14 insertions, 12 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index 7505ccd..3f6fdf0 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -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.
diff --git a/Misc/NEWS b/Misc/NEWS
index aa99407..ff88878 100644
--- 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.