为什么httpd似乎使用相同的可执行文件的不同版本的Python?

我在RedHat 5机器上运行Apache httpd 2.4.4。 我正在使用Django并通过mod_wsgi运行。 我在/ usr / bin中安装了Python 2.4.3,在/ usr / local / bin中安装了Python 2.7.6,我想使用2.7.6。 我从源代码构build2.7.6,并构build了mod_wsgi-3.4。

我已经创build了一个使用2.7.6的virtualenv,并且从命令shell中,python -V告诉我它正在使用2.7.6(在执行. virtpy/bin/activate )。 运行import sys; sys.version import sys; sys.version显示我2.7.6以及sys.executable显示我/www/sqla/virtpy/bin/python

当我从httpd运行它时,加载库时出现问题,当我查看sys.version ,我看到2.7.3 。 奇怪的是, sys.executable仍然显示我/www/sqla/virtpy/bin/python与我从命令shell中看到的完全一样

具体来说,当python试图加载_socket,我看到这个错误从httpd:

ImportError: /www/sqla/virtpy/lib/python2.7/lib-dynload/_socket.so: undefined symbol: _PyInt_AsInt

如果我尝试从命令shell导入_socket,没问题。 我有. /www/sqla/virtpy/bin/activate . /www/sqla/virtpy/bin/activate在我的/ etc / sysconfig / httpd中. /www/sqla/virtpy/bin/activate ,并重新启动了Apache。

同一个可执行文件如何给出不同版本的python? 我怎样才能说服它使用正确的?

使用mod_wsgi文档中logging的检查来validation你的mod_wsgi的编译方式是否正确:

确保在执行此操作时检查LD_LIBRARY_PATH未设置。 提供来自ldd的输出。

还要指出除/ usr / local之外,还有/ usr下的任何Python 2.7安装,特别是/ usr / lib下的Python 2.7共享库。

如果您在Apacheconfiguration中使用了WSGIPythonHome指令,请说明您已将其设置为。