Instalando mod_python no Apache – Python e web

Depois de começar a brincar com o Google AppEngine, decidi realmente levar a sério o Python. Cheguei à uma conclusão do motivo pelo qual a Google vem investindo tanto no Python: realmente a linguagem é fantástica.

Vou começar uma série de artigos sobre o desenvolvimento de aplicações WEB usando Python com o Django, um poderoso framework web, no qual eu comecei a respeitar, tanto quanto a comunidade Ruby respeita o Ruby on Rails.

Antes de entrar nos detalhes do modelo de implementação do Django com Python, estou postando um simples tutorial de como configurar o Apache e o mod_python para que você possa desenvolver aplicações.

Para o meu tutorial, eu usei o Apache 2.2 para Windows e a mesma versão para o Ubuntu. Caso queira ver a lista dos pré-requisitos, sugiro que acesse a página do mod_python pois a versão do módulo só funciona com a versão certa do apache. Veja:  Requisitos para o mod_python

Passo 1:

Verifique a versão do Python que você possui instalado na sua máquina. Para poder rodar o mod_python, você precisa do python 2.5.x, pois por alguns problemas relativos à compilação, o mod_python ainda não suporta o python 2.6 .

Para fazer isso, entre num prompt do dos e digite python –version . Se estiver tudo certo, verificará algo como “Python 2.5.xx” .

Caso apresente um erro que o executável não foi encontrado, certifique-se que a pasta do Python está no seu path.


Passo 2:

Faça download do mod_python . No momento em que esse tutorial foi escrito, a versão era (ou é) a 3.3 . Para windows, existe um instalador e basta seguir o processo NNF (next, next, finish).

Para *Nix, é necessário baixar os fontes e compilar na mão. Verifique se a sua distribuição não oferece o pacote pronto, assim você economiza tempo e CPU :) . Antes da compilação, caso você opte por fazer na mão, precisa decidir como quer carregar o módulo: por DSO ( Dynamic Shared Object) ou estáticamente. Se for pra linha do estático, vai precisar recompilar o Apache.

Eu escolhi compilar usando DSO. Só para deixar claro, o utilitário que faz o processo da carga dinâmica de módulos é chamado de APXS  Verifique se o mesmo está no seu path!

Rodei um configure bem simples: ./configure –with-apxs=/usr/local/apache/bin/apxs

Depois disso, os famosos comandos make e depois make install. Lembre-se que para rodar o make install você precisa estar logado como root, pois ele copiará a biblioteca para o seu libexec.


Passo 3:

Depois disso tudo, vem o truque necessário para o Python rodar no Apache. Eu apanhei algumas vezes pois as documentações além de desatualizadas, estão cheias de erro.

Para fazer rodar você precisa editar o arquivo httpd.conf. No windows, está na pasta “conf” e nos linux, normalmente fica em /etc/httpd.conf .

Abra o arquivo no seu editor favorito e procure por linhas que comecem por “LoadModule”. Você vai achar várias linhas, uma embaixo da outra, com um monte de módulos. Essas linhas falam ao Apx para carregar o módulo e depois da última, inclua uma nova linha:

LoadModule python_module modules/mod_python.so

Só garanta que a pasta que o módulo está, foi configurada corretamente. É possível colocar o caminho completo por lá também.

Depois de carregado o módulo, é necessário configurar um diretório para que os scripts python seja interpretados. Procure por linhas que comecem por “<Directory “ no httpd.conf e inclua uma nova, com o seguinte formato:

Para windows:

<Directory "c:/diretorio_apache/www/py/">
        SetHandler mod_python
        PythonHandler mptest
        PythonDebug On
</Directory>

Para Linux:

<Directory "/pasta/diretorioapache/www/py/">
        SetHandler mod_python
        PythonHandler mptest
        PythonDebug On
</Directory>

Pronto! Depois desse processo, salve o arquivo e reinicie seu apache. Verifique nos arquivos de log se não ocorreu nenhum erro com a carga do módulo e passe para a etapa seguinte.


Passo 4:

Vamos gerar um arquivo de teste, para que seja executado pelo navegador. Abra um editor qualquer e digite o seguinte conteúdo:

from mod_python import apache

def handler(req):
	req.content_type = 'text/plain'
	req.write("Funcionou. Minha aplicacao python esta ok.")
	return apache.OK

Salve o arquivo na pasta py que você criou no arquivo de configuração do apache e chame-o através do browser. Ex: http://localhost/py/teste.py . Se tudo ocorreu bem, você deve ver “Funcionou. Minha aplicacao python esta ok”.

É isso. O segredo está no “SetHandler”, que muitas documentações passam outra forma.

Caso tenha alguma dúvida, faça um comentário e consulte também a documentação no site do mod_python.

Até a próxima com Django.

Bookmarksbookmark bookmark bookmark bookmark bookmark bookmark

Popularity: 4%

5 Comments so far

  1. Gustavo on June 4th, 2009

    Ola,

    Estou com um problema,
    não estou conseguindo fazer rodar o Python no
    apache..

    aparece um erro que não consegue carregar o
    o arquivo de configuração.

    Estou usando o django.

    a linha que inseri no httpd.conf foi

    SetHandler python-program
    PythonPath “['C:/wamp/www/'] + sys.path”
    PythonHandler django.core.handlers.modpython
    SetEnv DJANGO_SETTINGS_MODULE settings
    PythonOption django.root /casamentodaboneca
    PythonDebug On

    vc pode me ajudar nisso…
    ja esto a 2 dias tentando!

    muito obrigado

  2. Tiago Becker on September 16th, 2009

    Estou com o python 2.5 e 2.6 instalado, vc sabe como fazer o mod_python usar o 2.5? ele sempre tenta usar o 2.6 e falha..

    Valeu!

  3. Maycon Ghizzi on March 31st, 2010

    isso ae não funfa nem FU******

    ele escreve todo o código python (isso se o apache iniciar), como se ‘simplesmente’ eu não tivesse feito nada…..

    Na verdade to a 5 horas tentando fazer funfar o python em apache… já fiz tudo que se possa imaginar..entendo pq ngm usa python em sites agora…

    rsrsrsrsrs

  4. admin on March 31st, 2010

    Não funciona ou vc não tá sabendo configurar ? :)

    Poste aí o que tá rolando.

  5. Maycon Ghizzi on April 1st, 2010

    Pois é, escrevi ontem isso meio que na raiva..

    Consegui depois de um tempo entender o que acontece….

    Depois de muita luta ele me retornava um erro “InternalError”, dizendo que estava com problema nessa linha “PythonHandler mptest”…..

    Acontece QUE: eu tenho que renomeiar meu arquivo py para “mptest” senão não funciona…dae tentei usar o apache para escrever o nome do arquivo solitado como ‘handler’..com rewrite engine + – assim: “RewriteRule ^(.+).(py)$ PythonHandler $1.$2″ mas dae parei nisso. fui dormir.

Vale Presente