为 apache 2.2 和 python 3.2 安装 Mod-wsgi 3.3

为 apache 2.2 和 python 3.2 安装 Mod-wsgi 3.3

我正在尝试在装有 apache 2.2 和 python 3.2 的 ubuntu 11.10 桌面版上安装 Mod-wsgi 3.3

我下载了源码包并解压。我使用选项--with-python=/usr/bin/python3对其进行了配置configure。这是我安装的唯一一份 python3 副本。

然后我发出了命令makesudo make install

我尝试使用重新启动 apachesudo /etc/init.d/apache2 restart并收到以下错误消息:

apache2: Syntax error on line 203 of /etc/apache2/apache2.conf: Syntax error on line 1
of /etc/apache2/mods-enabled/wsgi.load: Cannot load /usr/lib/apache2/modules
/mod_wsgi.so into server: /usr/lib/apache2/modules/mod_wsgi.so: undefined symbol: 
PyCObject_FromVoidPtr
Action 'configtest' failed.
The Apache error log may have more information.
   ...fail!

错误日志仅告诉我们这是一个段错误:`

我检查以确保它链接到正确的 Python 库并ldd mod_wsgi.so得到输出

linux-gate.so.1 =>  (0x00d66000)
libpython3.2mu.so.1.0 => /usr/lib/libpython3.2mu.so.1.0 (0x0065b000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00a20000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000)
libssl.so.1.0.0 => /lib/i386-linux-gnu/libssl.so.1.0.0 (0x0028c000)
libcrypto.so.1.0.0 => /lib/i386-linux-gnu/libcrypto.so.1.0.0 (0x0044c000)
libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0x002d9000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0x00eb3000)
libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0x00abe000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x002e0000)
libutil.so.1 => /lib/i386-linux-gnu/libutil.so.1 (0x00c47000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0x00e24000)
/lib/ld-linux.so.2 (0x0042c000)

它似乎链接到了 python3 库,所以我不确定问题是什么。我在另一个问题上读到过,mod-python 可能会出现问题,但它从未安装过。

我看到该指令WSGIPythonHome可用于指向正确的 Python 版本,并创建了一个/usr/bin/apache2-python/名为pythonpython3(我传递给配置脚本的名称)的链接目录/usr/bin/python3,这会导致相同的错误。所以我很确定它使用的是正确版本的 Python。

我现在很茫然。

在此先感谢您的帮助。

更新

使用存储库中的版本,当我尝试请求页面时,我收到以下日志:

[Wed Mar 21 13:21:11 2012] [notice] child pid 5567 exit signal Aborted (6)
Fatal Python error: Py_Initialize: Unable to get the locale encoding
LookupError: no codec search functions registered: can't find encoding
[Wed Mar 21 13:21:13 2012] [notice] child pid 5568 exit signal Aborted (6)
Fatal Python error: Py_Initialize: Unable to get the locale encoding
LookupError: no codec search functions registered: can't find encoding
[Wed Mar 21 13:21:14 2012] [notice] caught SIGTERM, shutting down

如果我注释掉加载 mod-wsgi 的指令,页面就可以正常服务。

答案1

对于 Python 3.2,请使用 mod_wsgi 存储库中的源代码。

http://code.google.com/p/modwsgi/source/checkout

相关内容