]> granicus.if.org Git - python/commitdiff
bpo-30645: don't append to an inner loop path in imp.load_package() (GH-2268)
authorAlexandru Ardelean <ardeleanalex@gmail.com>
Fri, 23 Jun 2017 17:35:03 +0000 (20:35 +0300)
committerBrett Cannon <brettcannon@users.noreply.github.com>
Fri, 23 Jun 2017 17:35:03 +0000 (10:35 -0700)
Bug didn't manifest itself when importing a module with source as .py files are always the first on the search path. The issue only showed up in bytecode-only packages where the calculated file path would be ``__init__.py/__init__.pyc``.

Patch by Alexandru Ardelean.

Lib/imp.py
Misc/ACKS
Misc/NEWS

index 781ff23d2521611ea70a8c2d46629c9da5878097..866464b245b24c5de4503a055813dcd6b63a741e 100644 (file)
@@ -203,8 +203,9 @@ def load_package(name, path):
         extensions = (machinery.SOURCE_SUFFIXES[:] +
                       machinery.BYTECODE_SUFFIXES[:])
         for extension in extensions:
-            path = os.path.join(path, '__init__'+extension)
-            if os.path.exists(path):
+            init_path = os.path.join(path, '__init__' + extension)
+            if os.path.exists(init_path):
+                path = init_path
                 break
         else:
             raise ValueError('{!r} is not a package'.format(path))
index 4f98e980bd971fb7729f1e4da8f9bf2ec4f53072..eaff17232c9a12dda26801f84bdb21885cc28ff6 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -57,6 +57,7 @@ Ankur Ankan
 Heidi Annexstad
 Ramchandra Apte
 Éric Araujo
+Alexandru Ardelean
 Alicia Arlen
 Jeffrey Armstrong
 Jason Asbahr
index 55e5bceb16edaab660032d32417086d8466cc9db..fc9e1dee6fc16cbeabca921395918434787b935a 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -428,6 +428,10 @@ Library
 - bpo-30508: Don't log exceptions if Task/Future "cancel()" method was
   called.
 
+- bpo-30645: Fix path calculation in `imp.load_package()`, fixing it for
+  cases when a package is only shipped with bytecodes. Patch by
+  Alexandru Ardelean.
+
 - bpo-11822: The dis.dis() function now is able to disassemble nested
   code objects.