将 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 列