So, a bit of a problem came up with pip and namespace packages.  Here&#39;s my understanding of what&#39;s going on:<br><br>When you install a namespace package with pip, it uses install --single-version-externally-managed, and generally the namespace directory is empty and there&#39;s a *.nspkg.pth file that has this:<br>

<br>import sys,new,os; p = os.path.join(sys._getframe(1).f_locals[&#39;sitedir&#39;], *(&#39;&lt;NAMESPACE&gt;&#39;,)); ie = os.path.exists(os.path.join(p,&#39;__init__.py&#39;)); m = not ie and sys.modules.setdefault(&#39;zope&#39;,new.module(&#39;zope&#39;)); mp = (m or []) and m.__dict__.setdefault(&#39;__path__&#39;,[]); (p not in mp) and mp.append(p)<br clear="all">

<br>So the lack of an __init__.py file doesn&#39;t really matter, because it&#39;s created right there, and has its __path__ added to.  But there&#39;s a problem when there&#39;s another namespace package elsewhere on the path, that wasn&#39;t installed with pip (or Setuptools) and uses pkgutils.extend_path(__path__, __name__).  This doesn&#39;t get imported because of that .pth file, and the .pth file doesn&#39;t itself use extend_path, so the path isn&#39;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&#39;m not sure why the installation is different with pip.)<br>

<br>So... what should pip be doing differently to make this work?<br><br>-- <br>Ian Bicking  |  <a href="http://blog.ianbicking.org">http://blog.ianbicking.org</a><br>