Estou executando uma caixa do Debian Lenny, que vem com o Python 2.5.2. Eu gostaria de executar o Python 2.7 para meus aplicativos WSGI somente , mantendo 2.5 como padrão para o sistema, mas não consigo fazê-lo funcionar.
Primeiro, eu instalei o Python 2.7.2 da fonte em /usr/local
:
Python-2.7.2 # ./configure --enable-shared
[…]
Python-2.7.2 # make
[…]
Python-2.7.2 # make altinstall
[…]
Chamar python2.7
agora da linha de comando funciona sem problemas. Também encontra pacotes instalados via pip
in /usr/local/lib/python2.7/packages
.
Em seguida, criei mod_wsgi
e copiei-o manualmente para o diretório do módulo do Apache, para não tocar nos arquivos colocados por apt-get
.
mod_wsgi-3.3 # ./configure --with-python=/usr/local/bin/python2.7
[…]
mod_wsgi-3.3 # make
[…]
mod_wsgi-3.3 # cp .libs/mod_wsgi.so /usr/lib/apache2/modules/mod_wsgi.so-2.7
mod_wsgi-3.3 # cd /usr/lib/apache2/modules
modules # ln -sf mod_wsgi.so-2.7 mod_wsgi.so
modules # ldd mod_wsgi.so-2.7
linux-vdso.so.1 => (0x00007fff08f53000)
libpython2.7.so.1.0 => /usr/local/lib/libpython2.7.so.1.0 (0x00002b0317e1f000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00002b03181fd000)
libdl.so.2 => /lib/libdl.so.2 (0x00002b031841a000)
libutil.so.1 => /lib/libutil.so.1 (0x00002b031861e000)
libm.so.6 => /lib/libm.so.6 (0x00002b0318821000)
libc.so.6 => /lib/libc.so.6 (0x00002b0318aa5000)
/lib64/ld-linux-x86-64.so.2 (0x00002b03179cd000)
Eu então modifiquei /etc/apache2/mods-available/wsgi.conf
e adicionei a seguinte diretiva:
<IfModule mod_wsgi.c>
[…]
WSGIPythonHome /usr/local
[…]
</IfModule>
(Claro, wsgi.conf
é linkado por símile em /etc/apache2/mods-enabled
.)
Por fim, reiniciei o apache, mas meus scripts WSGI não serão executados. Recebo o seguinte traceback no log de erros do Apache:
mod_wsgi (pid=20746): Exception occurred processing WSGI script '/path/to/script.wsgi'.
Traceback (most recent call last):
File "/usr/local/lib/python2.5/site-packages/Flask-0.7.2-py2.5.egg/flask/app.py", line 1306, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.5/site-packages/Flask-0.7.2-py2.5.egg/flask/app.py", line 1295, in wsgi_app
return response(environ, start_response)
File "/usr/local/lib/python2.5/site-packages/Werkzeug-0.6.2-py2.5.egg/werkzeug/wrappers.py", line 1017, in __call__
start_response(status, headers)
TypeError: expected byte string object for status, value of type str found
Eu também testei o script WSGI de teste encontrado na seção Problemas de instalação de mod_wsgi
's documentação, mas eu recebo o mesmo TypeError
aqui. A julgar pelo traceback, eu diria que o Apache agora roda o Python 2.5 em combinação com mod_wsgi
compilado para 2.7.
Alguma idéia?