On Thu, Apr 12, 2012 at 12:16:22PM +0200, Wichert Akkerman wrote:
I am running into something very odd on an Ubuntu 11.10 system: it looks like namespace packages are entirely broken there.
Interesting. As a data point: I use zc.buildout 1.5.2 on Ubuntu 11.10. I haven't encountered any namespace issues yet.
Here is a pdb session to demonstrate:
(Pdb) import repoze (Pdb) repoze <module 'repoze' from '/home/wichert/lib/buildout/eggs/repoze.formapi-0.4.2-py2.7.egg/repoze/__init__.pyc'> (Pdb) repoze.__path__ ['/home/wichert/lib/buildout/eggs/repoze.sphinx.autointerface-0.6.2-py2.7.egg/repoze', '/home/wichert/lib/buildout/eggs/repoze.formapi-0.4.2-py2.7.egg/repoze']
So at this point I can import the repoze namespace packages, which is defined by both repoze.sphinx.autointerface and repoze.formapi. Now I try to import repoze.sphinx.autointerface:
(Pdb) import repoze.sphinx.autointerface *** ImportError: No module named autointerface
That is unexpected since we saw the repoze.sphinx.autointerface egg was found earlier. So lets look at repoze.sphinx:
(Pdb) repoze.sphinx <module 'repoze.sphinx' from '/usr/lib/pymodules/python2.7/sphinx/__init__.pyc'>
Do you have a small sample buildout.cfg so that I could try to reproduce this? This one worked for me:
$ cat buildout.cfg [buildout] parts = wtf
[wtf] recipe = z3c.recipe.scripts # recipe = zc.recipe.egg also worked fine eggs = Sphinx repoze.formapi repoze.sphinx.autointerface interpreter = python
$ python bootstrap.py $ bin/python Python 2.7.2+ (default, Oct 4 2011, 20:03:08) >>> import repoze >>> repoze.__path__ ['/home/mg/.buildout/eggs/repoze.formapi-0.5.0-py2.7.egg/repoze', '/home/mg/.buildout/eggs/repoze.sphinx.autointerface-0.6.2-py2.7.egg/repoze'] >>> import repoze.sphinx.autointerface >>> repoze.sphinx <module 'repoze.sphinx' from '/home/mg/.buildout/eggs/repoze.sphinx.autointerface-0.6.2-py2.7.egg/repoze/sphinx/__init__.pyc'>
even though I also have sphinx installed into my dist-packages (/usr/lib/pymodules/python2.7/sphinx/__init__.pyc exists).
I did not see that coming at all: how can a system sphinx package that is not inside the repoze namespace suddenly appear there? This is especially odd since buildout hooked me up with a sphinx package in the buildout itself:
(Pdb) import sphinx <module 'sphinx' from '/home/wichert/lib/buildout/eggs/Sphinx-1.0.1-py2.7.egg/sphinx/__init__.pyc'>
I am not sure who is responsible for this behaviour or how to debug this. Does anyone have any useful hints?
Not really. I'm afraid when I encounter buildout issues, I'm in the "aaargh no time for yak shaving NOW" mode, so I tend to intuitively twiddle some knobs like 'include-site-packages = false' for 10-15 minutes until it starts working.