From 46c6ed5eb81ac806fb4e36c4dbfeb8146a07736d Mon Sep 17 00:00:00 2001 From: PJ Eby Date: Tue, 4 Sep 2007 04:10:16 +0000 Subject: Fix import problems with nested namespace packages installed via ``--root`` or ``--single-version-externally-managed``, due to the parent package not having the child package as an attribute. (backport from trunk) --HG-- branch : setuptools-0.6 extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/branches/setuptools-0.6%4057946 --- setuptools.txt | 4 +++ setuptools/command/install_egg_info.py | 62 +++++++++++++++++----------------- 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/setuptools.txt b/setuptools.txt index 8f4eb7d1..226caeb7 100755 --- a/setuptools.txt +++ b/setuptools.txt @@ -2616,6 +2616,10 @@ Release Notes/Change History * Fixed ``distutils.filelist.findall()`` crashing on broken symlinks, and ``egg_info`` command failing on new, uncommitted SVN directories. + * Fix import problems with nested namespace packages installed via + ``--root`` or ``--single-version-externally-managed``, due to the + parent package not having the child package as an attribute. + 0.6c6 * Added ``--egg-path`` option to ``develop`` command, allowing you to force ``.egg-link`` files to use relative paths (allowing them to be shared across diff --git a/setuptools/command/install_egg_info.py b/setuptools/command/install_egg_info.py index 8f972638..939340c5 100755 --- a/setuptools/command/install_egg_info.py +++ b/setuptools/command/install_egg_info.py @@ -56,6 +56,30 @@ class install_egg_info(Command): return dst unpack_archive(self.source, self.target, skimmer) + + + + + + + + + + + + + + + + + + + + + + + + def install_namespaces(self): nsp = self._get_all_ns_packages() if not nsp: return @@ -66,6 +90,12 @@ class install_egg_info(Command): f = open(filename,'wb') for pkg in nsp: pth = tuple(pkg.split('.')) + trailer = '\n' + if '.' in pkg: + trailer = ( + "; m and setattr(sys.modules[%r], %r, m)\n" + % ('.'.join(pth[:-1]), pth[-1]) + ) f.write( "import sys,new,os; " "p = os.path.join(sys._getframe(1).f_locals['sitedir'], " @@ -74,12 +104,11 @@ class install_egg_info(Command): "m = not ie and " "sys.modules.setdefault(%(pkg)r,new.module(%(pkg)r)); " "mp = (m or []) and m.__dict__.setdefault('__path__',[]); " - "(p not in mp) and mp.append(p)\n" + "(p not in mp) and mp.append(p)%(trailer)s" % locals() ) f.close() - def _get_all_ns_packages(self): nsp = {} for pkg in self.distribution.namespace_packages or []: @@ -92,32 +121,3 @@ class install_egg_info(Command): return nsp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- cgit v1.2.3