[Distutils] Setuptools, namespace packages, --single-version-externally-managed
P.J. Eby
pje at telecommunity.com
Wed May 6 02:03:23 CEST 2009
At 04:35 PM 5/5/2009 -0500, Ian Bicking wrote:
>Any ideas on this? Phillip?
>
>On Fri, May 1, 2009 at 5:07 PM, Ian Bicking
><<mailto:ianb at colorstudy.com>ianb at colorstudy.com> wrote:
>So, a bit of a problem came up with pip and namespace
>packages. Here's my understanding of what's going on:
>
>When you install a namespace package with pip, it uses install
>--single-version-externally-managed, and generally the namespace
>directory is empty and there's a *.nspkg.pth file that has this:
>
>import sys,new,os; p =
>os.path.join(sys._getframe(1).f_locals['sitedir'],
>*('<NAMESPACE>',)); ie =
>os.path.exists(os.path.join(p,'__init__.py')); m = not ie and
>sys.modules.setdefault('zope',new.module('zope')); mp = (m or [])
>and m.__dict__.setdefault('__path__',[]); (p not in mp) and mp.append(p)
>
>So the lack of an __init__.py file doesn't really matter, because
>it's created right there, and has its __path__ added to. But
>there's a problem when there's another namespace package elsewhere
>on the path, that wasn't installed with pip (or Setuptools) and uses
>pkgutils.extend_path(__path__, __name__). This doesn't get
>imported because of that .pth file, and the .pth file doesn't itself
>use extend_path, so the path isn't searched. This is currently
>happening with Zope packages installed with plain distutils, then
>another package installed with the zope namespace elsewhere with
>pip. (When using easy_install, I think
>pkg_resource.declare_namespace comes into play somewhere, and this
>seems to handle this case, but I'm not sure why the installation is
>different with pip.)
>
>So... what should pip be doing differently to make this work?
Heck if I know. IIUC, this should work as long as the namespace
declaration gets invoked at some point.
But I don't know of any way to ensure that, except for pip to write
its own __init__.py (invoking declare_namespace()) and gets rid of
the nspkg.pth file.
More information about the Distutils-SIG
mailing list