删除了MacPorts,现在Python已经坏了

时间:2013-01-04 07:51:02

标签: python

我已经从我的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

我现在如何清理这个烂摊子?

1 个答案:

答案 0 :(得分:6)

假设这是系统Python,并且您通过lxmlpip安装到其中,并且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,或执行{{1}在你已经拥有的东西之上,可能可以工作,但这不能保证。

如果我错误地认为Lion会有不错的sudo pip install lxml,请在评论中说明,我会给你选择(不重新安装MacPorts)。

如果您想确定已清理所有内容,只需执行以下操作即可将系统站点程序包恢复为默认状态:

libxml2

然后,当然,你必须重新安装你安装的任何东西。 (如果您上次没有使用sudo rm -rf /Library/Python/2.7/site-packages/* rm -rf ~/Library/Python/2.7/site-packages/* ,请从pip开始,然后使用sudo easy_install pip进行其他操作...)您可以很好地了解您刚安装的内容在这些相同的目录上执行pip,但这不一定会告诉您 如何安装所有内容。 (例如,我有一些我用ls或二进制安装程序安装的软件包,或者在一个案例中我完全不知道......)所以,如果你没有,请考虑这个核选项其他选择 - 不是第一手段,但比重新安装OS X的热核选项更好。

相关问题