Commit 46c6ed5e authored by PJ Eby's avatar PJ Eby

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
parent 9dcf16a5
...@@ -2616,6 +2616,10 @@ Release Notes/Change History ...@@ -2616,6 +2616,10 @@ Release Notes/Change History
* Fixed ``distutils.filelist.findall()`` crashing on broken symlinks, and * Fixed ``distutils.filelist.findall()`` crashing on broken symlinks, and
``egg_info`` command failing on new, uncommitted SVN directories. ``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 0.6c6
* Added ``--egg-path`` option to ``develop`` command, allowing you to force * Added ``--egg-path`` option to ``develop`` command, allowing you to force
``.egg-link`` files to use relative paths (allowing them to be shared across ``.egg-link`` files to use relative paths (allowing them to be shared across
......
...@@ -56,6 +56,30 @@ class install_egg_info(Command): ...@@ -56,6 +56,30 @@ class install_egg_info(Command):
return dst return dst
unpack_archive(self.source, self.target, skimmer) unpack_archive(self.source, self.target, skimmer)
def install_namespaces(self): def install_namespaces(self):
nsp = self._get_all_ns_packages() nsp = self._get_all_ns_packages()
if not nsp: return if not nsp: return
...@@ -66,6 +90,12 @@ class install_egg_info(Command): ...@@ -66,6 +90,12 @@ class install_egg_info(Command):
f = open(filename,'wb') f = open(filename,'wb')
for pkg in nsp: for pkg in nsp:
pth = tuple(pkg.split('.')) 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( f.write(
"import sys,new,os; " "import sys,new,os; "
"p = os.path.join(sys._getframe(1).f_locals['sitedir'], " "p = os.path.join(sys._getframe(1).f_locals['sitedir'], "
...@@ -74,12 +104,11 @@ class install_egg_info(Command): ...@@ -74,12 +104,11 @@ class install_egg_info(Command):
"m = not ie and " "m = not ie and "
"sys.modules.setdefault(%(pkg)r,new.module(%(pkg)r)); " "sys.modules.setdefault(%(pkg)r,new.module(%(pkg)r)); "
"mp = (m or []) and m.__dict__.setdefault('__path__',[]); " "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() % locals()
) )
f.close() f.close()
def _get_all_ns_packages(self): def _get_all_ns_packages(self):
nsp = {} nsp = {}
for pkg in self.distribution.namespace_packages or []: for pkg in self.distribution.namespace_packages or []:
...@@ -92,32 +121,3 @@ class install_egg_info(Command): ...@@ -92,32 +121,3 @@ class install_egg_info(Command):
return nsp return nsp
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