【问题标题】:"undefined symbol: __xmlStructuredErrorContext" importing etree from lxml“未定义符号:__xmlStructuredErrorContext”从 lxml 导入 etree
【发布时间】:2015-10-12 20:09:50
【问题描述】:
>>> import lxml
>>> from lxml import etree
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /usr/local/lib/python3.4/site-packages/lxml/etree.cpython-34m.so: undefined symbol: __xmlStructuredErrorContext

我确实有 libxml2 和 libxslt,我也尝试过卸载和重新安装,但没有帮助。 lxml 版本:3.4.4, 蟒蛇:3.4.2, 操作系统:RHEL 5.5 请帮助解决此问题

谢谢

【问题讨论】:

  • 这不仅仅是拥有它们的问题,您必须拥有与编译共享库的相同版本。
  • 顺便说一句,即使 Regis 给出的答案并不能解决您的直接问题,它 使用的更好做法(因为它直接导入 etree 模块,而不是导入 lxml 模块,然后解析其 etree 引用)。
  • 顺便说一句,您可能会发现 stackoverflow.com/questions/26488797/… 很有趣。

标签: python lxml libxml2 importerror libxslt


【解决方案1】:

您的lxml.etree 版本是针对与您实际安装的版本不同的libxml2 版本编译的。重新安装 libxml2 没有帮助,因为您只是重新安装相同的代码。重新安装捆绑现有 etree.cpython-34m.so 二进制文件的二进制文件也不起作用,因为该二进制文件本身已损坏 (it refers to a symbol that isn't exported in all versions of libxml2)。

卸载 Python 模块 - 而不是 C 库 - 并重新安装它从源代码。 (pip 应该能够自动执行此操作,假设您安装了 libxml2 和 libxslt 的 -devel 头文件以及适当的编译器)。

【讨论】:

  • 谢谢查尔斯,但我确实使用 pip 安装了 lxml。以及如何查看共享库是如何编译的?
  • 您可以使用ldd 来查找有问题的.so 文件使用的libxml2 库(确保在运行时调用代码时环境中没有LD_LIBRARY_PATH 变量覆盖不同的位置),然后nm 查看它包含的符号。
  • 谢谢查尔斯,我浏览了链接,我做了同样的事情,这是我的错误[root@qos-ucs1 lib]# nm libxml2.so.2 | grep __xmlStructuredErrorContext 00000000000a2750 T __xmlStructuredErrorContext
  • 我确实有一个“T”,我不确定这是否会导致同样的错误
  • 好的——所以你在/usr/lib中的libxml2副本确实导出了那个符号,所以它应该可以正常工作。也许你在其他地方有另一个副本?检查运行时环境中的 LD_LIBRARY_PATH 和 LD_PRELOAD 以查看它们是否导致使用不同的库。
猜你喜欢
  • 2021-05-29
  • 2016-04-09
  • 2012-08-17
  • 1970-01-01
  • 2014-09-01
  • 2014-03-13
  • 1970-01-01
  • 2019-11-11
  • 2017-04-06
相关资源
最近更新 更多