Comment utiliser Python avec apache2?

13

J'essaie de faire fonctionner Python avec Apache, mais je n'arrive pas à réussir avec CGI ou mod_python.

Quelqu'un connaît-il un bon tutoriel ou quelque chose?

Merci.

Vallery
la source

Réponses:

17

mod_pythonest fondamentalement non maintenu - vous devriez regarder mod_wsgi. Installez le package libapache2-mod-wsgi, puis lancez-le sudo a2enmod wsgipour l'activer.

Juste un exemple rapide pour le faire fonctionner, remplissez quelque chose comme ceci dans votre /etc/apache2/sites-enabled/default:

WSGIScriptAlias /test /path/to/python/file.py

Et dans le dossier /path/to/python/file.py:

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return "Hello World"

Après avoir redémarré Apache2, toute demande de /testse transformera en appel deapplication() dans votre fichier python.

Pour de plus amples informations, consultez WSGI (WebServer Gateway Interface), la façon dont Python s'intègre aux serveurs Web.

Bonus / mise à jour:

Python (sans surprise) a un petit serveur WSGI dans la bibliothèque standard pour les tests. Si vous ajoutez ceci au bas de votre fichier, vous pouvez l'exécuter comme n'importe quel ancien exécutable à des fins de test, puis laisser Apache prendre le relais pour la production:

if __name__ == '__main__':
    from wsgiref.simple_server import make_server

    httpd = make_server('', 8080, application)
    print "Serving on http://localhost:8080"

    httpd.serve_forever()
Morten Siebuhr
la source
J'ai obtenu ce qui suit comme erreur, dans le journal d'apache. Pour autant que je sache, il pense qu'il ne reçoit pas de chaîne.
Vallery
[Sat Mar 05 17:06:14 2011] [erreur] [client 127.0.0.1] mod_wsgi (pid = 2844): Une exception s'est produite lors du traitement du script WSGI '/var/www/file.py'. [Sat Mar 05 17:06:14 2011] [erreur] [client 127.0.0.1] Traceback (dernier appel le plus récent): [Sat Mar 05 17:06:14 2011] [erreur] [client 127.0.0.1] File " /var/www/file.py ", ligne 2, dans l'application [Sat Mar 05 17:06:14 2011] [erreur] [client 127.0.0.1] start_response (200, [('Content-Type', 'text / plain ')]) [Sat Mar 05 17:06:14 2011] [erreur] [client 127.0.0.1] TypeError: objet chaîne d'octets attendu pour le statut, valeur de type int trouvée
Vallery
Ah. Ma faute. Je suis habitué aux frameworks qui font toutes les choses délicates pour moi;). J'ai mis 200à jour le '200 OK'par python.org/dev/peps/pep-0333
Morten Siebuhr
Génial, ça marche. Dernière question: comment le faire afficher en html? Mon navigateur affiche le retour en clair, en ignorant le balisage.
Vallery
1
Attendez, compris: changez text / plain en text / html.
Vallery