web-dev-qa-db-fra.com

Quel est l'équivalent Python de Tomcat?

Cette question trahit probablement une idée fausse, mais je suis curieux de savoir quel est le "Tomcat" du monde Python.

Toute mon expérience de programmation Web est en Java (ou Groovy) donc je pense en Java termes. Et quand je pense à faire une application web de base, Je pense à écrire des servlets, à créer un fichier WAR et à le déployer dans Tomcat ou un autre conteneur de servlets.

En Python, supposons que j'aie écrit du code capable de répondre aux requêtes HTTP, qu'en ferais-je? Comment pourrais-je le déployer?

Plus précisément: Quel est le conteneur le plus couramment utilisé en Python? Et existe-t-il un équivalent d'un fichier WAR, un emballage standard d'une application Web dans un fichier qui fonctionne dans les différents conteneurs?

42
Eric Wilson

Il existe différentes approches qui ont une chose en commun: elles communiquent généralement via WSGI avec leur "conteneur" (le serveur recevant les requêtes HTTP avant d'aller vers votre Python).

Il existe différents conteneurs:

  • wsgiref - une implémentation de référence très simple qui est agréable pendant le développement
  • Apache avec mod_wsgi
  • la plupart des autres serveurs Web avec un module ajoutant le support WSGI
  • beaucoup plus
32
ThiefMaster

quand je pense à créer une application web de base, je pense à écrire des servlets, à créer un fichier WAR et à le déployer dans Tomcat ou un autre conteneur de servlets.

C'est gentil, mais hors de propos. C'est juste un Java-isme, et ne s'applique pas très largement en dehors de Java.

En Python, supposons que j'aie écrit du code capable de répondre aux requêtes HTTP, qu'en ferais-je? Comment pourrais-je le déployer?

Ça dépend.

Quel est le conteneur le plus couramment utilisé en Python?

Il n'y en a pas.

Et existe-t-il un équivalent d'un fichier WAR, un emballage standard d'une application Web dans un fichier qui fonctionne dans les différents conteneurs?

Il n'y en a pas.


HTTP est un protocole pour produire une réponse à une demande. C'est tout. C'est vraiment une toute petite chose.

Vous disposez de scripts CGI qui peuvent répondre à une demande. La bibliothèque Python cgi peut le faire. http://docs.python.org/library/cgi.html .

Ceci est relativement inefficace car la règle CGI simple est "déclencher un nouveau processus pour chaque demande". Il peut également être peu sûr si le script autorise des privilèges élevés ou des téléchargements mal planifiés.

Tu as le mod_wsgi framework pour connecter Apache à Python. Cela peut se comporter comme CGI, ou il peut avoir un Python "démon" en cours d'exécution à la fin d'un canal nommé.

La norme WSGI définit un format de traitement des demandes et des réponses qui est très pratique et très extensible. La plupart des frameworks - d'une manière ou d'une autre - sont compatibles WSGI.

Enfin, il existe des cadres plus complets qui incluent des définitions de classe pour les demandes et les réponses, l'analyse d'URL, l'authentification, l'autorisation, etc., etc.

Voici une liste: http://wiki.python.org/moin/WebFrameworks

6
S.Lott

Peut-être que "uwsgi" vous aidera. Voici le lien: http://projects.unbit.it/uwsgi/

2
Kaibin

Il existe de nombreux serveurs Web disponibles pour Python. Certains des serveurs Web comme CherryPy ont été écrits en Python lui-même. La partie la plus cool de la réponse est que le serveur Tomcat lui-même prend en charge les applications basées sur Python.

Pour plus de détails, consultez ce site: https://wiki.python.org/moin/WebServers

0
Anand