我有一个需要Python(3.4)lxml包的django应用程序。我在构建 l xml 在我的红帽服务器环境中依赖的 c 共享库 libxslt 和 libxml2 时遇到了相当多的麻烦。但是,pip install lxml
现在成功完成,我可以在命令行解释器中导入和使用 lxml。
当我重新启动 apache 时,在我的 django 应用程序中导入 lxml 会导致错误: ImportError: /usr/local/lib/python3.4/site-packages/lxml/etree.cpython-34m.so: undefined symbol: exsltMathXpathCtxtRegister
我已经检查了我的LD_LIBRARY_PATH在两个环境(/usr/lib)中是否设置相同。
我注意到当我通过 pip 重新安装 lxml 时,pip 告诉我它正在针对/usr/lib64 上的 libxml2/libxslt 构建。我已经删除了在/usr/lib64/找到的所有 libxml2.so 和 libxslt.so 文件,并困惑地发现 pip 继续告诉我它正在针对 lib64 构建,安装成功完成,并且 lxml 仍然在命令行上正常工作,但不是通过 apache。
pip 还表示,它在安装中使用的检测到的 libxslt 版本是 1.1.23。但是,我使用 strace 看到当我使用解释器导入时,加载的库是/usr/lib/libxslt.so.1.1.28。我不知道有任何工具或技术可以找出通过apache加载的库。
有没有人对正在发生的事情或如何调试问题有任何理论?提前感谢!
通过从 usr/lib64/中删除 libexslt.so 文件来修复。