From 92a61578a4b7d09ad6a6f9524163e67b62782e18 Mon Sep 17 00:00:00 2001 From: PJ Eby Date: Fri, 17 Mar 2006 16:57:23 +0000 Subject: Support namespace packages in conjunction with system packagers, by omitting the installation of any ``__init__.py`` files for namespace packages, and adding a special ``.pth`` file to create a working package in ``sys.modules``. --HG-- branch : setuptools extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4043119 --- setuptools/command/install_egg_info.py | 44 +++++++++++++++++----------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'setuptools/command/install_egg_info.py') diff --git a/setuptools/command/install_egg_info.py b/setuptools/command/install_egg_info.py index 0b61a11d..a537b5e7 100755 --- a/setuptools/command/install_egg_info.py +++ b/setuptools/command/install_egg_info.py @@ -37,7 +37,7 @@ class install_egg_info(Command): self.execute(self.copytree, (), "Copying %s to %s" % (self.source, self.target) ) - + self.install_namespaces() def get_outputs(self): return self.outputs @@ -58,25 +58,25 @@ class install_egg_info(Command): unpack_archive(self.source, self.target, skimmer) - - - - - - - - - - - - - - - - - - - - - + def install_namespaces(self): + nsp = (self.distribution.namespace_packages or [])[:] + if not nsp: return + nsp.sort() # set up shorter names first + filename,ext = os.path.splitext(self.target) + filename += '-nspkg.pth'; self.outputs.append(filename) + log.info("Installing %s",filename) + if not self.dry_run: + f = open(filename,'wb') + for pkg in nsp: + pth = tuple(pkg.split('.')) + f.write( + "import sys,new; " + "m = sys.modules.setdefault(%(pkg)r,new.module(%(pkg)r)); " + "p = os.path.join(sys._getframe(1).f_locals['sitedir'], " + "*%(pth)r); " + "mp = m.__path__ = getattr(m,'__path__',[]); " + "(p not in mp) and mp.append(p)\n" + % locals() + ) + f.close() -- cgit v1.2.1