【问题标题】:Need help installing lxml on os x 10.7需要帮助在 os x 10.7 上安装 lxml
【发布时间】:2011-12-19 04:20:51
【问题描述】:

我一直在努力做到from lxml import etree(顺便说一下import lxml 工作正常)错误是:

ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-            packages/lxml/etree.so, 2): Symbol not found: _htmlParseChunk
Referenced from: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml/etree.so
Expected in: flat namespace
in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml/etree.so

我使用 pip 安装 lxml,并使用 homebrew 重新安装具有正确架构的 libxml2(或者我认为)...有人对如何修复/诊断此问题有想法吗?我在 64 位 python 上

【问题讨论】:

  • 尝试在etree.so 上使用otool -L 以查看它正在搜索的库路径。
  • 输出是etree.so: /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1) ...不确定我应该如何处理这些信息
  • 虽然我注意到它输出的路径中没有文件

标签: python lxml libxml2 pip homebrew


【解决方案1】:

lxml 对它使用的 3rd-party 库有点挑剔,而且它通常需要比 Apple 提供的版本更新的版本。建议您阅读并遵循说明here 在 Mac OS X 上从源代码构建 lxml,包括构建自己的静态链接库。那应该行得通。 (我有点惊讶 homebrew 还没有 lxml 配方。)

更新:根据您的 cmets 中有限的信息,很难确定到底发生了什么。我怀疑你没有使用你认为的 Python 版本。有多种方法可以成功安装 lxml;这是问题的一部分:有太多的选择。与其尝试调试您的设置,这可能是使用 Apple 提供的系统 Python 2.7 在 10.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 位的。这与您报告的其他一些消息一致。

【讨论】:

  • 好的-我只是这样做了,并在安装结束时注意到了这个附带条件:这个公式是仅限小桶的,所以它没有符号链接到 /usr/local。 Mac OS X 已经提供了这个程序,并行安装另一个版本可能会导致各种麻烦。一般来说,这对您没有任何后果。如果您构建自己的软件并且它需要此公式,则需要将其 lib 和包含路径添加到构建变量中:LDFLAGS -L/usr/local/Cellar/libxslt/1.1.26/lib CPPFLAGS -I/usr /local/Cellar/libxslt/1.1.26/include
  • 这是否意味着我在 pip install lxml 时需要做一些事情?
  • 另外,在使用自制软件安装 libxslt 后,我​​仍然遇到同样的错误。我在想 lxml 使用了错误的 libxml2 和 libxslt 来构建,这可能吗?
  • 我忘记了 lxml 是多么的繁琐。请参阅更新的答案。 lxml可以安装在10.7上; MacPorts 没问题。
  • 好吧,我尝试使用 --static-deps 安装...它失败了:-I/Users/patrickbrooks/Downloads/lxml-lxml-6d1e124/build/tmp/libxml2/include/ libxslt -I/Users/patrickbrooks/Downloads/lxml-lxml-6d1e124/build/tmp/libxml2/include/libexslt -I/opt/local/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 - c src/lxml/lxml.etree.c -o build/temp.macosx-10.5-x86_64-2.6/src/lxml/lxml.etree.o -w -flat_namespace 无法执行 /usr/bin/gcc-4.0: 否此类文件或目录错误:命令“/usr/bin/gcc-4.0”失败,退出状态为 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多