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のバージョンで十分であると仮定します(2.7.xのように10.7でやや最近のバージョンの出荷を開始したと思いますが、私は確かに思い出せない)、それは次のように単純でなければなりません:

sudo pip uninstall lxml
sudo pip install lxml

ここでの問題は、システムバージョンではなく、lxmlMacPorts libxml2/に対して構築されていることです。libxslt2理論的には、で依存関係を再指定することは可能かもしれませんがinstall_name_tool、それは惨めに失敗する可能性が高くなります。または、本当に運が悪ければ、機能しているように見えますが、本当に必要なときにクラッシュします…再構築するだけlxmlで問題が解決するはずです。 。また、を使用した場合はpip、アンインストール/再インストールと同じくらい簡単です。

を使用しなかった場合は、tarballのクリーンなコピーからpipマニュアルをやり直したり、やり直したり、既存のものを上回ったりすることはおそらく機能しますが、それは保証されません。sudo python setup.py installsudo easy_install lxmlsudo 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、またはバイナリインストーラーからインストールしたパッケージがいくつかあるか、場合によってはまったくわかりません…)したがって、他に選択肢がない場合は、これを核オプションと見なしてください。最初の手段ですが、OSXを再インストールする熱核オプションよりも優れています。

于 2013-01-04T07:57:24.393 に答える