lxml
有点挑剔,它使用的第三方库通常需要比苹果提供的更新版本。建议您阅读并按照此处的说明在Mac OS X上构建lxml
,包括构建其自己的静态链接库。那应该可行。(我有点惊讶homebrew没有一个lxml配方。)
更新:根据您评论中的有限信息,很难确定发生了什么。我怀疑您没有使用您认为的Python版本。有很多种方法可以成功安装lxml;这是问题的一部分:选项太多了。与其尝试调试您的设置,也许在10.7上使用由Apple提供的系统Python 2.7获得工作的lxml的最简单方法如下。
$ sudo STATIC_DEPS=true /usr/bin/easy_install-2.7 lxml
您随后应该能够以这种方式使用 lxml.etree
:
$ /usr/bin/python2.7
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from lxml import etree
>>> etree.__file__
'/Library/Python/2.7/site-packages/lxml-2.3.1-py2.7-macosx-10.7-intel.egg/lxml/etree.so'
>>>
我注意到 lxml
的静态构建过程无法生成可用的通用构建。在 lxml
安装期间,您可能会看到类似于以下消息:
ld: warning: ignoring file /private/tmp/easy_install-83mJsV/lxml-2.3.1/build/tmp/libxml2/lib/libxslt.a, file was built for archive which is not the architecture being linked (i386)
假设您的计算机默认架构为64位,如果您尝试以32位模式运行:
$ arch -i386 /usr/bin/python2.7
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:06)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] 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.1-py2.7-macosx-10.7-intel.egg/lxml/etree.so, 2): Symbol not found: _htmlParseChunk
Referenced from: /Library/Python/2.7/site-packages/lxml-2.3.1-py2.7-macosx-10.7-intel.egg/lxml/etree.so
Expected in: flat namespace
in /Library/Python/2.7/site-packages/lxml-2.3.1-py2.7-macosx-10.7-intel.egg/lxml/etree.so
>>> ^D
这就是你最初报告的错误信息!因此,该问题的根本原因似乎是 lxml
构建的静态库(如 libxml2
等)不是通用的。只要您不需要在 32 位进程中使用 lxml
(对于大多数用途来说不太可能),这应该不是问题。很有可能你最初使用的 Python 是仅支持 32 位的;这与你报告的一些其他消息是一致的。
etree.so
上使用otool -L
命令,查看它正在搜索哪些库路径。 - Ned Deilyetree.so: /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
,我不确定我应该如何处理这些信息。 - Pat B