zc.buildout stopped working: ImportError: No modul

2019-03-25 09:29发布

I've been using buildout for quite a while now without any issue, in fact I did yesterday without any problems.

But as today all my projects fail to buildout. I tried on two different Ubuntu workstations with the same result.

This is the error I get:

Initializing zc.buildout
Debug: Downloading http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
Traceback (most recent call last):
  File "bootstrap.py", line 259, in <module>
    import zc.buildout.buildout
  File "/tmp/tmpNkVMXW/zc.buildout-2.0.0-py2.7.egg/zc/buildout/buildout.py", line 18, in <module>
    import zc.buildout.easy_install
  File "/tmp/tmpNkVMXW/zc.buildout-2.0.0-py2.7.egg/zc/buildout/easy_install.py", line 59, in <module>
    pkg_resources.Requirement.parse('distribute')
AttributeError: 'NoneType' object has no attribute 'location'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 66, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
ImportError: No module named apport.fileutils

Original exception was:
Traceback (most recent call last):
  File "bootstrap.py", line 259, in <module>
    import zc.buildout.buildout
  File "/tmp/tmpNkVMXW/zc.buildout-2.0.0-py2.7.egg/zc/buildout/buildout.py", line 18, in <module>
    import zc.buildout.easy_install
  File "/tmp/tmpNkVMXW/zc.buildout-2.0.0-py2.7.egg/zc/buildout/easy_install.py", line 59, in <module>
    pkg_resources.Requirement.parse('distribute')
AttributeError: 'NoneType' object has no attribute 'location'

It complains that there's no module named apport.fileutils .. but I get no exception when I run python and import it:

from apport.fileutils import likely_packaged, get_recent_crashes

2条回答
Evening l夕情丶
2楼-- · 2019-03-25 09:36

2.0.0 just got released. The old bootstrap.py is not compatible with 2.0.0 but downloads it by default. You can get the v2 bootstrap.py from here, or use the code below if you want to stick with the old version.

python bootstrap.py -v 1.7.0

edit: older versions of v1 bootstrap.py don't allow version forcing. The up-to-date version here does.

查看更多
时光不老,我们不散
3楼-- · 2019-03-25 09:36

The question + answer is from 2013. I recently (2015) saw it happening again.

The problem is that ubuntu's python-apport package installs a /usr/lib/python2.7/dist-packages/apport_python_hook.py file that overrides sys.excepthook. It makes sure python tracebacks are fed into ubuntu's "apport" error reporting mechanism.

That in itself is not a problem. But bootstrap.py restricts the python path, so that the hook cannot import apport anymore...

So if an error occurs during the bootstrap run, an exception is printed which then fails a second time because apport cannot be imported.

A solution could be to sudo apt-get remove python-apport. That's at least what we did on the server (where having apport makes no sense in any case).

查看更多
登录 后发表回答