Fazer o mod_wsgi usar python2.7.2 em vez de python2.6?

5
Estou executando o Ubuntu 10.04.1 LTS e veio pré-embalado com python2.6, mas eu preciso substituí-lo por python2.7.2.

(O motivo é simples, o 2.7 tem muitos recursos retornados de 3)

eu tinha instalado o python2.7.2 usando

./configure
make
make altinstall

a opção altinstall instalou-a, sem tocar na versão padrão do sistema, para /usr/local/lib/python2.7 e colocou o interpretador em /usr/local/bin/python2.7

Depois, para ajudar o mod_wsgi a encontrar o python2.7, adicionei o seguinte ao / etc / apache2 / sites-available / wsgisite

WSGIPythonHome /usr/local

inicio o apache e executo um aplicativo wsgi de teste MAS sou saudado pelo python 2.6.5 e não pelo Python2.7

Mais tarde eu substituí o simlink python padrão para apontar para python 2.7

ln -f /usr/local/bin/python2.7 /usr/bin/python

Agora, digitando 'python' no console abre o python2.7, mas de alguma forma o mod_wsgi ainda pega o python2.6

Em seguida, tentei

PATH=/usr/local/bin:$PATH
export PATH

faça um reinício rápido do apache, mas ainda novamente o python2.6 !!

Aqui está o meu $ PATH

/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

conteúdo de / etc / apache2 / sites-available / wsgisite

WSGIPythonHome /usr/local


<VirtualHost *:80>

    ServerName wsgitest.local
    DocumentRoot /home/wwwhost/pydocs/wsgi
    <Directory /home/wwwhost/pydocs/wsgi>
        Order allow,deny
        Allow from all
    </Directory>

    WSGIScriptAlias / /home/wwwhost/pydocs/wsgi/app.wsgi

</VirtualHost>

app.wsgi

import sys

def application(environ, start_response):
    status = '200 OK'
    output = sys.version

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

Apache error.log

'import site' failed; use -v for traceback
[Sun Jun 19 00:27:21 2011] [info] mod_wsgi (pid=23235): Initializing Python.
[Sun Jun 19 00:27:21 2011] [notice] Apache/2.2.14 (Ubuntu) mod_wsgi/2.8 Python/2.6.5 configured -- resuming normal operations
[Sun Jun 19 00:27:21 2011] [info] Server built: Nov 18 2010 21:20:56
[Sun Jun 19 00:27:21 2011] [info] mod_wsgi (pid=23238): Attach interpreter ''.
[Sun Jun 19 00:27:21 2011] [info] mod_wsgi (pid=23239): Attach interpreter ''.
[Sun Jun 19 00:27:31 2011] [info] mod_wsgi (pid=23238): Create interpreter 'wsgitest.local|'.
[Sun Jun 19 00:27:31 2011] [info] [client 192.168.1.205] mod_wsgi (pid=23238, process='', application='wsgitest.local|'): Loading WSGI script '/home/wwwhost/pydocs/$
[Sun Jun 19 00:27:50 2011] [info] mod_wsgi (pid=23239): Create interpreter 'wsgitest.local|'.

Alguém já conseguiu fazer o mod_wsgi rodar em uma versão padrão do Python?

    
por guron 19.06.2011 / 02:55

4 respostas

4

compilando o python 2.7

./configure \
   --prefix=/usr/local \
   --enable-unicode=ucs4 \
   --enable-shared \
   LDFLAGS="-Wl,-rpath /usr/local/lib"

make && make altinstall

não se esqueça de --enable-shared ou poderá ter problemas mais tarde.

compilando o mod_wsgi para o python 2.7

link

desde que você fez o make altinstall para instalar o python2.7 , você não terá um pacote python-devel para instalar; então você precisaria do mod_wsgi para se referir ao python adequado.

./configure --with-python=/usr/local/bin/python2.7 
# then edit Makefile if you want to change DESTDIR
make && make install

... tenta iniciar o httpd ...

Starting httpd: httpd: Syntax error on line 221 of /etc/httpd/conf/httpd.conf: Syntax error on line 2 of /etc/httpd/conf.d/wsgi.conf: Cannot load /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so into server: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

Como não estamos usando o mesmo python e não vinculamos o módulo a nenhuma opção em particular para fazê-lo parecer no lugar correto, ele não pode encontrar libpython2.7.so.1.0 , podemos mudar isso fazendo libtool verifique o local correto .

# use LDFLAGS to tell libtool resulting lib needs to
# look for shared libs in /usr/local/lib too.
./configure \
   --with-python=/usr/local/bin/python2.7 \
   LDFLAGS="-R/usr/local/lib"
# then edit Makefile if you want to change DESTDIR
# e.g. DESTDIR = /opt/mod_wsgi2.7
make && make install

... tente iniciar o http novamente ...

Starting httpd: httpd: Syntax error on line 221 of /etc/httpd/conf/httpd.conf: Syntax error on line 2 of /etc/httpd/conf.d/wsgi.conf: Cannot load /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so into server: /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so: cannot open shared object file: Permission denied

Esse último erro é porque o meu sistema está executando o selinux e o arquivo tem o contexto padrão. Uma rápida olhada no stackoverflow me diz que é um problema de selinux.

corrigindo o contexto do selinux

# ls -Z /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so 
-rwxr-xr-x. root root unconfined_u:object_r:user_tmp_t:s0 /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so

A correção é usar o contexto correto, que pode ser encontrado no módulo mod_wsgi original.

chcon --reference /etc/httpd/modules/mod_wsgi.so /opt/mod_wsgi2.7/usr/lib64/httpd/modules/mod_wsgi.so 
    
por 15.09.2014 / 23:58
2

Você precisa recompilar o mod_wsgi too . Apenas recompilar python não é suficiente (não esqueça de carregar a versão correta de mod_wsgi )

EDIT: clique aqui para obter instruções de instalação

    
por 19.06.2011 / 03:35
1

É assim que você pode configurar o mod_wsgi para usar o Python2.7

Por acaso, enfrentei esse mesmo problema. E eu estava olhando para a opção de desinstalar o mod_wsgi e reinstalá-lo com configurações apropriadas.

Lendo um dos artigos eu percebi que não havia necessidade de desinstalar meu mod_wsgi atual e eu poderia simplesmente ir em frente e reinstalar o mod_wsgi3.4 (antes eu tinha v3.2) com as configurações para usar o Python2.7 (parece que o processo de instalação reescreve tudo sem erros / conflitos).

Desde que eu já tinha o Python2.7 instalado.

Eu reinstalei o mod_wsgi-3.4 (sem executar nenhuma desinstalação)

[root @ server ~] # cd ~

[root @ server ~] # wget link

[root @ servidor ~] # tar xvf mod_wsgi-3.4.tar.gz

[root @ server ~] # cd mod_wsgi-3.4

Mod_wsgi configurado com o python2.7 instalado

[root @ server ~] #. / configure --with-python = / usr / local / bin / python2.7

[root @ server ~] # make

[root @ server ~] # make install

Os dois comandos abaixo são muito importantes. Substitua / usr / local / lib pela pasta onde você instalou o libpython2.7.so.1.0, se ele não estiver em /usr/local/lib.

[root @ server ~] # LD_LIBRARY_PATH = / usr / local / lib / usr / local / bin / python

[root @ server ~] # ldconfig

Reinicie o servidor Apache

[root @ server ~] # serviço httpd restart

[root @ server ~] # ldd /etc/httpd/modules/mod_wsgi.so

Saída do comando acima: Line2 indica que seu mod_wsgi está usando agora as bibliotecas Python2.7. YAY!

    linux-vdso.so.1 =>  (0x00007fffc0aa9000)
    libpython2.7.so.1.0 => /usr/lib/libpython2.7.so.1.0 (0x00007f03a5b20000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f03a5903000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f03a56fe000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007f03a54fb000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f03a5277000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f03a4ee2000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f03a6133000)
    
por 26.05.2015 / 02:37
0

Estou tendo o mesmo problema ao instalar as ferramentas do ReviewBoard no Amazon Linux 4.9.38-16.35.amzn1.x86_64 seguindo link .

Ao executar yum install mod_wsgi , recebi mod_wsgi-python26.x86_64 . Mais tarde, aprendi a pesquisar com o yum por yum search mod_wsgi e descobri que a instalação do python27 também está disponível. Então, executar sudo yum install mod_wsgi-python27.x86_64 resolveu o problema.

    
por 12.08.2017 / 04:17