【问题标题】:Removed MacPorts, now Python is broken删除了 MacPorts,现在 Python 坏了
【发布时间】:2012-12-18 15:50:35
【问题描述】:

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

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

【问题讨论】:

  • 通过重新安装 XSLT 库?您的 MacPorts 安装提供了这些,现在 lxml(一个附加库)是 b0rken。
  • @MartijnPieters:对于有 Lion 的人来说,这确实是过时的建议。我相信 Lion 已经提供了可用的 libxml2libxslt2(虽然我可能错了——再说一次,即使我错了,我怀疑你今天是否想明确要求版本 2.7.3 …)
  • 请确认以下几点: 1. 这是Apple提供的Python (/usr/bin/python)? 2. 您没有非 Apple 提供的 Python 安装。 3. /usr/lib/libxml2.dylib 有东西。 4. 如果您运行xml2-config --version,它会报告2.7.0 或更高版本的内容。然后:你是如何安装lxml的? (pipeasy_install,下载 tarball/extract/python setup.py install,或者其他方式)?
  • 我在安装lxml 后遇到了同样的问题。但是考虑到我在没有 Xcode 的 OS X 10.6.8 上努力安装 gcc,然后努力让 lxml 编译,我对它仍然无法正常工作并不感到惊讶......

标签: python


【解决方案1】:

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

sudo pip uninstall lxml
sudo pip install lxml

这里的问题是 lxml 是针对 MacPorts libxml2/libxslt2 构建的,而不是针对您的系统版本。从理论上讲,可以只使用install_name_tool 重新指向依赖项,但这更有可能惨遭失败——或者,如果你真的很不幸,看起来可以工作,但在你真正需要它时会崩溃……只需重新构建@ 987654328@ 应该可以解决问题。如果你使用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 on 上对您安装的内容有一个很好的了解那些相同的目录,但这并不一定会告诉您如何您安装了所有东西。 (例如,我有几个使用pip install git+https://some.site/some/repo 安装的软件包,或者来自二进制安装程序,或者在一种情况下我完全不知道......)所以,如果你别无选择,请考虑这个核选项— 不是第一选择,但比重新安装 OS X 的热核选项要好。

【讨论】:

  • 太棒了,谢谢!清理了所有东西,现在它又可以工作了。
猜你喜欢
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多