![Cent OS + Apache2 + mod_wsgi 错误](https://linux22.com/image/640325/Cent%20OS%20%2B%20Apache2%20%2B%20mod_wsgi%20%E9%94%99%E8%AF%AF.png)
我有一个运行 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
我已经寻找这个好几个小时了,但没有结果。
我该如何解决这个问题?提前致谢。
答案1
您正在尝试将针对一个 Python 安装编译的 lxml 版本用于另一个 Python 安装。这两个 Python 安装并不相同。具体来说,编译 lxml 所针对的版本在编译 Python 本身时指定了 16 位 Unicode 字符宽度。但是,所使用的 Python 运行时是针对 32 位 Unicode 字符宽度编译的。因此它将失败。
您需要检查的是,mod_wsgi 在运行时实际使用的共享 Python 库是什么,以及它是否正确。有关如何执行此操作,请参阅:
如果它选择了错误的库,则需要根据正确的 Python 安装重新编译 mod_wsgi,但LD_RUN_PATH
环境变量的设置应如文档中所述。
接下来需要检查的是,您没有告诉 mod_wsgi 使用与 mod_wsgi 正在使用的 Python 安装不同的 Python 安装构建的 Python 虚拟环境。
最后一件事是确保使用 32 位 Unicode 字符构建自定义 Python 安装。从源代码构建 Python 时,它默认为 16 位。在 Linux 上,发行版自己的 Python 安装始终针对 32 位 Unicode 进行编译,这就是为什么在开始混合 Python 安装时会遇到此问题的原因。
答案2
在 apache 中,使用指令建立 python 可执行文件的路径WSGIPythonHome
:
WSGIPythonHome /home/jenkins/local/bin/