Commit 298bb967 authored by Brett Cannon's avatar Brett Cannon

Issue #20778: Fix modulefinder to work with bytecode-only modules.

Bug filed and initial attempt at a patch by Bohuslav Kabrda.
parent 815b41b1
......@@ -287,7 +287,7 @@ class ModuleFinder:
if fp.read(4) != imp.get_magic():
self.msgout(2, "raise ImportError: Bad magic number", pathname)
raise ImportError("Bad magic number in %s" % pathname)
fp.read(4)
fp.read(8) # Skip mtime and size.
co = marshal.load(fp)
else:
co = None
......
import os
import errno
import importlib.machinery
import py_compile
import shutil
import unittest
import tempfile
......@@ -208,6 +210,14 @@ a/module.py
from . import *
"""]
bytecode_test = [
"a",
["a"],
[],
[],
""
]
def open_file(path):
dirname = os.path.dirname(path)
......@@ -288,6 +298,16 @@ class ModuleFinderTest(unittest.TestCase):
def test_relative_imports_4(self):
self._do_test(relative_import_test_4)
def test_bytecode(self):
base_path = os.path.join(TEST_DIR, 'a')
source_path = base_path + importlib.machinery.SOURCE_SUFFIXES[0]
bytecode_path = base_path + importlib.machinery.BYTECODE_SUFFIXES[0]
with open_file(source_path) as file:
file.write('testing_modulefinder = True\n')
py_compile.compile(source_path, cfile=bytecode_path)
os.remove(source_path)
self._do_test(bytecode_test)
def test_main():
support.run_unittest(ModuleFinderTest)
......
......@@ -29,6 +29,8 @@ Core and Builtins
Library
-------
- Issue #20778: Fix modulefinder to work with bytecode-only modules.
- Issue #20791: copy.copy() now doesn't make a copy when the input is
a bytes object. Initial patch by Peter Otten.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment