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
>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 =
>*('<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.