5

我已经从我的 Mac (10.7.5) 中删除了 MacPorts,现在 Python 似乎坏了。我正在尝试运行scrapy,最后出现以下错误:

ImportError: dlopen(/Library/Python/2.7/site-packages/lxml-2.3.4-py2.7-macosx-10.7-intel.egg/lxml/etree.so, 2): Symbol not found: _exsltDateXpathCtxtRegister
  Referenced from: /Library/Python/2.7/site-packages/lxml-2.3.4-py2.7-macosx-10.7-intel.egg/lxml/etree.so
  Expected in: /usr/lib/libexslt.0.dylib
 in /Library/Python/2.7/site-packages/lxml-2.3.4-py2.7-macosx-10.7-intel.egg/lxml/etree.so

当我运行 python 并尝试导入该库时,我收到与以下相同的错误:

$ python
Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 14:13:39) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from lxml import etree
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/Library/Python/2.7/site-packages/lxml-2.3.4-py2.7-macosx-10.7-intel.egg/lxml/etree.so, 2): Symbol not found: _xsltDocDefaultLoader
  Referenced from: /Library/Python/2.7/site-packages/lxml-2.3.4-py2.7-macosx-10.7-intel.egg/lxml/etree.so
  Expected in: flat namespace
 in /Library/Python/2.7/site-packages/lxml-2.3.4-py2.7-macosx-10.7-intel.egg/lxml/etree.so

我现在该如何收拾这个烂摊子?

4

1 回答 1

6

假设这是系统 Python,并且您lxml通过 安装到它pip,并且 10.7.5 附带的 libxml2 版本对您来说已经足够了(我认为他们在 10.7 中开始发布一些最新版本 - 就像在 2.7.x 中一样 - 但我不记得了),它应该很简单:

sudo pip uninstall lxml
sudo pip install lxml

这里的问题是它lxml是针对 MacPorts libxml2/构建libxslt2的,而不是针对您的系统版本。从理论上讲,用 重新指向依赖项是可能的install_name_tool,但这更有可能惨遭失败——或者,如果你真的不走运,似乎可以工作,但当你真正需要它时会崩溃……只需重新构建就lxml可以解决问题. 如果您使用过pip,那么就像卸载/重新安装一样简单。

如果您没有使用pip,则从干净的 tarball 副本重新执行手册sudo python setup.py install,或重新执行sudo easy_install lxml,或在sudo pip install lxml已有的基础上进行操作,可能会起作用,但这不能保证。

如果我对 Lion 带来的体面有误libxml2,请在评论中说出来,我会为您提供获取它的选项(无需重新安装 MacPorts)。

如果你想确定你已经清理了所有东西,你总是可以通过这样做将你的系统站点包恢复到它们的默认状态:

sudo rm -rf /Library/Python/2.7/site-packages/*
rm -rf ~/Library/Python/2.7/site-packages/*

然后,当然,你必须重新安装你安装的任何东西。pip(如果您上次没有使用,请先使用sudo easy_install pip,然后再pip用于其他所有内容……)您可以通过在相同的目录上执行一个非常好的了解您安装的确切内容ls,但这不一定会告诉您你是如何安装一切的。(例如,我有几个使用 安装的软件包pip install git+https://some.site/some/repo,或者来自二进制安装程序,或者在某种情况下我完全不知道......)所以,如果你别无选择,请考虑这是核选项 - 不是首选,但比重新安装 OS X 的热核选项更好。

于 2013-01-04T07:57:24.393 回答