Configuration de mod_wsgi pour Python 3.1
Par Thomas le dimanche 6 décembre 2009, 14:52 - Apache - Lien permanent
Je suis actuellement en train de travailler jouer avec un
framework web pour python3. Mis à part Bottle, qui fonctionne sur les version
2.x et 3.1 de Python, aucun des frameworks web majeurs actuels (Pylons, Django,
TurboGears...) n'a fait la transition, même si celle-ci est déjà entamée ne
serait-ce que dans la mesure où Python 2.6 est supporté.
Tout récemment mod_wsgi, le module Apache conçut pour les applications python wsgi est sorti en version 3.0 (puis rapidement en version 3.1 pour corriger quelques bugs). Cette version apporte le support de Python 3.1 en plus des versions suivantes : 2.3, 2.4, 2.5 et 2.6 (rappelons au passage que Python 3.0 a été abandonné par la PSF au profit de Python 3.1).
Je me suis donc penché sur l'installation de mod_wsgi pour Python 3.1. Les explications suivantes sont tirées de celles que j'ai rédigées pour le wiki d'Archlinux.
Introduction
Je pars du principe que Python, Apache et les outils de la chaîne de compilation, sont déjà installés. Par ailleurs les chemins qui sont indiqués sont ceux propres à ArchLinux, il est possible que pour d'autres distributions cela change. Les outils utilisés sont ceux proposés par toutes les distributions (ou presque ?), il ne devrait donc pas y avoir de changements à faire à ce niveau là.
Installation
Téléchargez les sources depuis le site du projet : http://code.google.com/p/modwsgi/downloads/list, il vous faudra la version 3.1 au minimum.
Décompressons tout ça : ~ $ tar -xvf
mod_wsgi-3.1.tar.gz
Puis : ~ $ cd mod_wsgi
Il faut ensuite configurer mod_wsgi pour la compilation :
~/mod_wsgi $ ./configure --prefix=/usr --with-apxs=/usr/sbin/apxs --with-python=/usr/bin/python3
Les paramètres que je passe à ./configure me permette de lui indiquer où se
situent les exécutables qu'il faudra utiliser. En particulier
--with-python est très important car si je ne le spécifie pas
mod_wsgi se contentera du programme python qui réside dans
/usr/bin/ et qui est en fait Python 2.6, je doit donc le forcer à
utiliser python3.
On lance la compilation : ~/mod_wsgi $ make
Puis l'installation (avec l'utilisateur root): ~/mod_wsgi # make
install
Activation dans Apache
Configuration d'Apache
Il faut ensuite ajouter la ligne suivante au fichier de configuration
d'Apache (/etc/httpd/conf/httpd.conf en ce qui me concerne) :
LoadModule wsgi_module modules/mod_wsgi.so
Redémarrez Apache pour qu'il prenne en compte les changements :
~# /etc/rc.d/httpd restart Si une erreur se produit ici, c'est
qu'il y a probablement une erreur dans le fichier de configuration, par
exemple, que le module est mal installé. Le fichier log d'Apache devrait dans
ce cas contenir un message d'erreur détaillé.
Test
Ajoutons encore quelques directives au fichier de configuration d'Apache. Ceci nous permettra de tester notre installation avec une petite application WSGI. Pour plus de détails sur la configuration d'Apache ou de mod_wsgi reportez vous à leur documentation respective. A la fin de celui-ci copier ce qui suit :
WSGIScriptAlias /wsgi_app /home/www/wsgi-scripts/wsgi_app.py
<Directory /home/www/wsgi-scripts>
Order allow,deny
Allow from all
</Directory>
Redémarrer à nouveau Apache.
Créer le dossier www/wsgi-scripts dans le répertoire
/home et faite en sorte que l'utilisateur sous lequel Apache est
lancé (par défaut il s'agit de http) puisse y accéder en
lecture : ~ # cd /home /home # mkdir -p
www/wsgi-scripts /home # chmod -R a+r www
Créer ensuite un fichier wsgi_app.py dans le dossier
nouvellement créé, et copier-y ceci :
#-*- coding: utf-8 -*-
def wsgi_app(environ, start_response):
import sys
output = str(sys.version)
status = '200 OK'
headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, headers)
yield output
application = wsgi_app
Redémarrons encore une fois Apache afin d'être certain que tous les changements ont été pris en compte.
A présent, si vous naviguer jusqu'à l'adresse
http://localhost/wsgi_app vous devriez voir s'afficher quelques
lignes ressemblants à :
3.1.1 (r311:74480, Aug 27 2009, 04:56:37) [GCC 4.4.1]
L'important étant de bien avoir 3.1.x pour la version de Python.
Plus d'info :
Liens :
- http://wiki.archlinux.org/index.php/Mod_wsgi
- http://bottle.paws.de/
- http://pylonshq.com/
- http://www.djangoproject.com/
- http://turbogears.org/