zc.buildout 停止工作:ImportError:没有名为 apport.fileutils 的模块

11 投票
2 回答
7705 浏览
提问于 2025-04-17 15:26

我已经使用buildout一段时间了,一直没有遇到问题,实际上我昨天还顺利使用过。

但是今天我所有的项目都无法正常构建了。我在两台不同的Ubuntu工作站上尝试,结果都是一样的。

我遇到的错误是:

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'

它提示找不到名为apport.fileutils的模块……但是当我运行python并导入它时却没有任何异常:

from apport.fileutils import likely_packaged, get_recent_crashes

2 个回答

0

这个问题和答案是2013年的内容。我最近(2015年)又遇到了同样的情况。

问题出在ubuntu的一个叫做python-apport的包,它会安装一个文件/usr/lib/python2.7/dist-packages/apport_python_hook.py,这个文件会覆盖掉sys.excepthook。它的作用是把python的错误信息发送到ubuntu的“apport”错误报告系统。

这本身并不是问题。但是bootstrap.py限制了python的路径,这样就无法再导入apport了……

所以如果在启动过程中发生错误,就会打印出一个异常信息,但因为无法导入apport,导致第二次也失败了。

一个解决办法是运行sudo apt-get remove python-apport。这也是我们在服务器上做的(因为在服务器上使用apport根本没有意义)。

24

2.0.0版本刚刚发布。旧的bootstrap.py与2.0.0版本不兼容,但默认情况下还是会下载它。如果你想要使用v2版本的bootstrap.py,可以从这里下载,或者如果你想继续使用旧版本,可以使用下面的代码。

python bootstrap.py -v 1.7.0

补充说明:旧版的v1 bootstrap.py不支持强制指定版本。而最新的版本在这里是支持的。

撰写回答