我正在尝试在装有 apache 2.2 和 python 3.2 的 ubuntu 11.10 桌面版上安装 Mod-wsgi 3.3
我下载了源码包并解压。我使用选项--with-python=/usr/bin/python3
对其进行了配置configure
。这是我安装的唯一一份 python3 副本。
然后我发出了命令make
和sudo 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/
名为python
和python3
(我传递给配置脚本的名称)的链接目录/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 存储库中的源代码。