2013-01-04 92 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