我有一个运行 Cent OS 6 的 Django 应用程序的开发服务器。我正在使用 Apache 和 mod_wsgi 为应用程序提供服务。我阅读了很多关于 Cent 附带的默认 Python 的内容,因此我从源代码安装了一个备用 Python 2.7.6,并使用 --enable-shared 对其进行了编译。我还从源代码安装了 mod_wsgi 并将其指向新的 Python 安装。
但是,每次我尝试运行该应用程序时,我都会从 lxml 收到以下错误:
..lib/python2.7/site-packages/lxml/objectify.so: undefined symbol: PyUnicodeUCS2_Format
错误中另一个值得注意的事情是正在使用的 Python 可执行文件不是所需的:
Python Executable: /usr/bin/python
而不是 /home/jenkins/local/bin/python
我一直在寻找这个几个小时无济于事。
我该如何解决这个问题?提前致谢。
您正在尝试使用针对不同 Python 安装的一个 Python 安装编译的 lxml 版本。两个 Python 安装不一样。具体来说,编译的一个 lxml 具有在编译 Python 本身时指定的 16 位 Unicode 字符宽度。使用的 Python 运行时编译为 32 但 Unicode 字符宽度。因此它将失败。
您需要检查的是,mod_wsgi 在运行时实际使用的共享 Python 库是什么,它是否正确。有关如何执行此操作,请参阅:
如果它选择了错误的库,则 mod_wsgi 需要针对正确的 Python 安装重新编译,但
LD_RUN_PATH
环境变量的设置位置如文档中所述。您需要检查的下一件事是您没有告诉 mod_wsgi 使用一个 Python 虚拟环境,该环境是针对与 mod_wsgi 所使用的不同的 Python 安装构建的。
您可以做的最后一件事是确保使用 32 位 Unicode 字符构建自定义 Python 安装。从源代码构建 Python 时,它默认为 16 位。在 Linux 上,发行版自己的 Python 安装总是编译为 32 位 Unicode,这就是为什么当你开始混合 Python 安装时会遇到这个问题。
在 apache 中,使用以下指令稳定 python 可执行文件的路径
WSGIPythonHome
: