Issue #14938: importlib.abc.SourceLoader.is_package() now takes the

module name into consideration when determining whether a module is a
package or not. This prevents importing a module's __init__ module
directly and having it considered a package, which can lead to
duplicate sub-modules.

Thanks to Ronan Lamy for reporting the bug.
This commit is contained in:
Brett Cannon 2012-06-15 20:00:53 -04:00
parent 0450c9ed52
commit ea0b823940
4 changed files with 14 additions and 5 deletions

View file

@ -578,7 +578,9 @@ class _LoaderBasics:
"""Concrete implementation of InspectLoader.is_package by checking if
the path returned by get_filename has a filename of '__init__.py'."""
filename = _path_split(self.get_filename(fullname))[1]
return filename.rsplit('.', 1)[0] == '__init__'
filename_base = filename.rsplit('.', 1)[0]
tail_name = fullname.rpartition('.')[2]
return filename_base == '__init__' and tail_name != '__init__'
def _bytes_from_bytecode(self, fullname, data, bytecode_path, source_stats):
"""Return the marshalled bytes from bytecode, verifying the magic