我有一个需要 Python (3.4) lxml 包的 django 应用程序。在我的红帽服务器环境中,我在构建 lxml 所依赖的 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 加载的库。
有没有人对正在发生的事情或如何调试问题有任何理论?提前致谢!