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: 6%

2 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!