将 lxml.etree 导入 python 时出错

Posted

技术标签:

【中文标题】将 lxml.etree 导入 python 时出错【英文标题】:get errors when import lxml.etree to python 【发布时间】:2012-11-01 14:25:26 【问题描述】:

我已经在我的 mac 上安装了一个 lxml,当我像这样输入 python 时

本地主机:lxml-3.0.1 苹果$ python Python 2.7.3(v2.7.3:70274d53c1dd,2012 年 4 月 9 日,20:52:43) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] 在 darwin 输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。 >>> 从 lxml 导入 etree 回溯(最近一次通话最后): 文件“”,第 1 行,在 ImportError:dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-3.0.1-py2.7-macosx-10.6-intel.egg/lxml/etree.so , 2): 未找到符号: ___xmlStructuredErrorContext 引用自:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-3.0.1-py2.7-macosx-10.6-intel.egg/lxml/etree.so 预期在:平面命名空间 在 /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/lxml-3.0.1-py2.7-macosx-10.6-intel.egg/lxml/etree.so

【问题讨论】:

这篇文章可能会有所帮助:Building Python Lxml in a Virtualenv on Mac OS X 10.7(您可能链接的是旧版本的 libxml2,而不是 lxml 所需的版本)。 我会考虑 Virtualenv,但我可以在当前的 python 基础上安装 lxml 吗? 谢谢,我会在测试此解决方案后返回这里 同样的原则应该适用于直接安装到您的 Python 安装。您的问题在这两种情况下都很常见。 你读过这个section of the lxml documentation吗?如果您使用MacPorts,最简单的解决方案是从there 安装。否则,最好的办法是关注项目的instructions for Mac OS X。 【参考方案1】:

我遇到了同样的问题。如果你已经用 pip 安装了,如下:pip install lxml

相反,尝试使用

STATIC_DEPS=true pip install lxml

这解决了我的问题。

发现于this website

【讨论】:

谢谢,经过数十次测试,我已经安装了该软件包。但您的解决方案似乎不错。【参考方案2】:

如果您安装了libxml2,那么它可能只是没有选择正确的版本(OS X 默认安装了一个版本)。特别是,假设您已将libxml2 安装到/usr/local。您可以查看etree.so 引用的共享库:

$> otool -L /Library/Python/2.7/site-packages/lxml-3.2.1-py2.7-macosx-10.7-intel.egg/lxml/etree.so 
/Library/Python/2.7/site-packages/lxml-3.2.1-py2.7-macosx-10.7-intel.egg/lxml/etree.so:
    /usr/lib/libxslt.1.dylib (compatibility version 3.0.0, current version 3.24.0)
    /usr/local/lib/libexslt.0.dylib (compatibility version 9.0.0, current version 9.17.0)
    /usr/lib/libxml2.2.dylib (compatibility version 10.0.0, current version 10.3.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

在系统安装版本中检查该符号:

$> nm /usr/lib/libxml2.2.dylib | grep ___xmlStructuredErrorContext

对我来说,它不存在于系统安装的库中。然而,在我安装的版本中:

$> nm /usr/local/lib/libxml2.2.dylib | grep ___xmlStructuredErrorContext
000000000007dec0 T ___xmlStructuredErrorContext

要解决此问题,请确保您的安装路径首先出现在 DYLD_LIBRARY_PATH

$> export DYLD_LIBRARY_PATH=/usr/local/lib
$> python
>>> from lxml import etree
# Success!

【讨论】:

经过一个小时的尝试,这解决了我的问题......这个问题的永久解决方案是什么? 您可以将此路径添加到/etc/ld.so.conf.d/lxml.conf(创建一个新文件),然后运行ldconfig(man7.org/linux/man-pages/man8/ldconfig.8.html 对我来说,做相反的事情解决了我的问题(因为该符号实际上是在系统的 libxml2 版本中),所以我不得不把 /usr/lib 作为 DYLD_LIBRARY_PATH 的第一个条目【参考方案3】:

如果您在 2022 年在 M1 Mac 上遇到此问题,请尝试以下操作:

pip3 uninstall lxml

pip3 install lxml

这会将 lxml 升级到最新版本(在我的情况下为 4.7.1 与 4.6.3),并根据有关此问题的其他轶事证据清除可能导致问题的文件。

【讨论】:

【参考方案4】:

运行以下命令安装 lxml 包。

pip install lxml --user 

应该解决这个问题。我在 MAC OSX 上测试过 10.7.5,它运行良好。

【讨论】:

以上是关于将 lxml.etree 导入 python 时出错的主要内容,如果未能解决你的问题,请参考以下文章

CentOS 6.3 上的 Python lxml etree

Python Xpath:lxml.etree.XPathEvalError:无效谓词

Python 3.4 lxml.etree:需要开始标记,未找到“<”,第 1 行,第 1 列

Python之xpathJsonPathbs4基本使用

Unicode 字符串的 lxml.etree.XML ValueError

python-docx-lxml.etree.XMLSyntaxError:AttValue长度太长