2013-01-04 91 views
3

我已从Mac(10.7.5)中删除MacPorts,现在Python似乎已被破坏。我试图运行scrapy,我得到以下错误在最后:已删除MacPorts,现在Python已损坏

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 

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

+0

通过重新安装XSLT库?你的MacPorts安装提供了这些,现在'lxml'(一个附加库)是b0rken。 –

+1

请参阅[如何在不使用MacPorts或Fink的情况下在OS X Leopard上安装lxml?](http://stackoverflow.com/q/1277124) –

+0

@MartijnPieters:对于有Lion的人来说,这实在是过时的建议。我相信Lion已经提供了可用的'libxml2'和'libxslt2'(尽管我可能会犯错误 - 即使我是,我怀疑你今天也想明确要求2.7.3版本...) – abarnert

回答

4

假设这是该系统的Python,和您通过pip安装lxml进去,和随之而来的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,重新做从压缩包的原始副本手动sudo python setup.py install,或重新做sudo easy_install lxml,或做一个sudo pip install lxml超过你已经有顶部,将可能工作,但这并不能保证。

如果我对狮友来体面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的安装,不一定告诉你如何你安装了一切。 (例如,我有几个软件包,我用​​安装,或者从二进制安装程序安装,或者在一种情况下,我完全不知道......)因此,如果您没有其他选择,请考虑这个核选项 - 不是第一个手段,但比重新安装OS X的热核选项更好。

+0

真棒,谢谢!清理所有东西,现在它再次工作。 – Raisen