New submission from Phil Connell: Only one level of namespace package nesting is handled correctly:
$ unzip -l foo.zip Archive: foo.zip Length Date Time Name --------- ---------- ----- ---- 0 2013-04-03 17:28 a/b/c/foo.py 0 2013-04-03 17:34 a/ 0 2013-04-03 17:34 a/b/ 0 2013-04-03 17:34 a/b/c/ --------- ------- 0 4 files $ ls foo.zip $ PYTHONPATH=foo.zip ~/dev/cpython/python Python 3.4.0a0 (default:3b1dbe7a2aa0+, Apr 3 2013, 17:31:54) [GCC 4.8.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import a >>> import a.b Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named 'a.b' >>> The problem appears to be that check_is_directory constructs the wrong directory path (it should be 'a/b'): check_is_directory (self=0x7ffff6d3dc88, prefix='a/', path='a.b') at ./Modules/zipimport.c:280 280 dirpath = PyUnicode_FromFormat("%U%U%c", prefix, path, SEP); (gdb) n 281 if (dirpath == NULL) (gdb) p dirpath $11 = 'a/a.b/' I've attached a tentative initial patch that appears to fix the issue, although it probably needs some more thought (and definitely some more testing - the existing tests still pass though). ---------- components: Extension Modules files: zipimport_ns.diff keywords: patch messages: 186025 nosy: brett.cannon, eric.snow, ncoghlan, pconnell priority: normal severity: normal status: open title: zipimport's handling of namespace packages is incorrect versions: Python 3.4 Added file: http://bugs.python.org/file29679/zipimport_ns.diff _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue17633> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com