Dans cet article, nous présentons plusieurs serveurs web Python que vous pouvez utiliser pour déployer vos applications Python.
Nous commencerons par comprendre le fonctionnement des serveurs web et la nécessité d’interfaces de passerelle de serveur. Ensuite, nous passerons en revue la liste des serveurs web Python ainsi que leurs principales caractéristiques. La plupart d’entre eux sont disponibles sous forme de paquets PyPI que vous pouvez installer et commencer à utiliser dans vos projets.
Commençons !
Qu’est-ce qu’un serveur web ?
Lorsque vous développez une application Python, vous utilisez le serveur de développement pour tester votre application. Cependant, une fois le développement terminé, vous devrez déployer votre application sur un serveur de production. Parmi plusieurs couches de fonctionnalités supplémentaires, un serveur web doit avoir les fonctionnalités de base d’un serveur HTTP.
Le serveur web Python doit être capable de traiter les requêtes HTTP (requêtes HTTP simples telles que GET, PUT et POST) des clients, tels que les navigateurs web, et de renvoyer la réponse. Cette réponse peut inclure le code d’état HTTP indiquant si la requête a été traitée avec succès ou non. Elle peut se composer de pages web HTML et de données semi-structurées telles que JSON, XML, etc.
ASGI vs. WSGI : Comprendre les interfaces de passerelle de serveur
Supposons que vous ayez développé une application Python dans le cadre de votre choix, par exemple Django ou Flask. Un serveur classique peut être incapable de comprendre et de traiter les requêtes adressées à l’application Python. C’est là que les interfaces de passerelle de serveur entrent en jeu.
Cette interface peut être une interface de passerelle de serveur Web(WSGI) ou une interface de passerelle de serveur asynchrone(ASGI). Le serveur web reçoit une requête d’un client, qu’il redirige ensuite vers l’interface de passerelle de serveur. L’interface (WSGI/ASGI) interagit avec l’application Python par l’intermédiaire d’un appel exposé.
L’interfaceWSGI (Web Server Gateway Interface) traite les demandes de manière séquentielle. S’il y a plusieurs requêtes HTTP lentes, elles auront un impact sur le débit.
L’interface ASGI (Asynchronous Server Gateway Interface) succède à WSGI et permet de traiter les requêtes de manière asynchrone.
Supposons qu’une requête en cours de traitement nécessite la lecture d’une base de données (ce qui peut prendre beaucoup de temps) et qu’elle attende la réponse. Lorsque la première demande attend une réponse, ASGI peut traiter une deuxième demande entrante.
Contrairement à WSGI, la première requête doit être traitée avant la seconde. Par conséquent, l’utilisation d’ASGI peut entraîner une augmentation du débit. ASGI vous permet également d’utiliser les capacités asynchrones de Python dans votre application.
Serveurs Web Python
Dressons maintenant la liste des serveurs web que vous pouvez utiliser pour vos applications Python. Nous avons également inclus certains frameworks qui fournissent un support prêt à l’emploi pour des serveurs prêts à la production. Cette liste n’est pas exhaustive et les serveurs web recommandés ci-dessous ne sont pas classés dans un ordre particulier.
Uvicorn
Si vous êtes familier avec le développement d’applications avec FastAPI, vous avez certainement rencontré Uvicorn, une implémentation de serveur web. Uvicorn est une implémentation de serveur ASGI pour Python.
Pour installer Uvicorn et les dépendances associées à l’aide de pip
, exécutez la commande suivante :
$ pip install uvicorn[standard]
# inclut l'installation des dépendances optionnelles et basées sur Cython
Voici les principales caractéristiques d’Uvicorn :
- Implémentation ASGI
- Prise en charge de l’exécution d’applications à partir d’un environnement Python asynchrone
- L’outil en ligne de commande avec une liste étendue d’options
- Prise en charge de l’exécution d’applications à partir de fonctions d’usine
- Fonctionnalités permettant de contrôler les instances de serveur de manière programmatique
Gunicorn
Gunicorn est un serveur WSGI pour les applications Python, bien connu pour ses fonctionnalités avancées de gestion des processus.
Uvicorn fournit une classe de travailleur Gunicorn, ce qui vous permet d’obtenir simultanément des avantages en termes de performances et de gestion des processus. Cette page de documentation contient des détails sur le déploiement de Gunicorn.
Si vous avez Python 3.5 et plus, vous pouvez installer Gunicorn en utilisant pip :
$ pip install gunicorn
Voici les principales caractéristiques de Gunicorn :
- Simple et rapide
- Compatible avec de nombreux frameworks web
- Prise en charge de l’utilisation d’un serveur proxy HTTP
- Gestion avancée des processus
CherryPy
CherryPy est un framework web Python – tout comme Django, Flask, et FastAPI – mais pas aussi populaire que ces frameworks. Avec plusieurs versions stables, CherryPy existe et a évolué en un framework à part entière depuis plus d’une décennie. Il bénéficie également du soutien d’une communauté de développeurs.
Vous pouvez consulter l’intéressant Zen of CherryPy, qui montre que CherryPy est un framework simple et minimaliste, mais puissant.
CherryPy est un framework Python et non un serveur web, mais il figure sur notre liste car il supporte nativement un serveur de production, contrairement à la plupart des autres frameworks.
Pour installer CherryPy et commencer, exécutez :
$ pip install CherryPy
Voici les principales caractéristiques de CherryPy :
- Cadre de travail pythonique utilisant Python orienté objet ; bien adapté aux débutants
- Prise en charge d’un serveur HTTP prêt pour la production, Cheroot
- Plus facile à apprendre que d’autres frameworks web, tels que Django
- Prise en charge de la construction et du déploiement d’applications web simples vers des microservices
Daphne
Django est l’un des frameworks web Python les plus populaires. Si vous avez développé des applications avec Django, vous avez probablement utilisé le serveur web Daphne. Daphne est l’une des premières implémentations de serveur ASGI utilisées comme référence pour les implémentations de serveur ASGI.
Daphne est disponible sous la forme d’un paquet PyPI que vous pouvez installer à l’aide de pip.
$ pip install daphne
Voici un tutoriel détaillé qui vous guidera dans la construction d’une application Python complète prête pour la production.
Voici les principales caractéristiques de Daphne :
- Largement adopté dans les environnements de production
- Référence pour toutes les implémentations de serveurs ASGI
- Prise en charge des protocoles HTTP, HTTP2 et WebSocket
Python Trio
Le projet Trio vise à fournir des capacités d’E/S asynchrones de niveau production : prise en charge des E/S parallèles et de la concurrence. Ce projet comporte également plusieurs bibliothèques Python pour le web et le HTTP.
Vous pouvez installer la dernière version de Trio (juin 2022) depuis PyPI.
$ pip install trio
Voici une liste de bibliothèques Trio utiles pour la programmation web avec Python :
hypercorn
: Hypercorn est un serveur ASGI qui supporte HTTPmuffin
: Muffin est un framework web ASGI pour Pythonstartlette
: Starlette est un cadre ASGI légertrio-websocket : support pour le <a href="https://geekflare.com/fr/websocket-servers/">serveur</a> et le client <a href="https://geekflare.com/fr/websocket-servers/">WebSocket</a> </li><li><code>httpx
: Client HTTP pour Python
Twisted Web
Twisted est un cadre de travail pour les applications Python. Ce framework événementiel comprend un module de programmation web appelé twisted.web.
Vous pouvez installer Twisted et les modules associés à l’aide de pip :
$ pip install Twisted
Voici les principales caractéristiques de Twisted :
- Fonctionnalités conviviales pour les développeurs, telles que les tests unitaires et la vérification statique du code
- twisted
.web
fournit un serveur WSGI et prend en charge les clients et serveurs HTTP
AIOHTTP
AIOHTTP est une bibliothèque Python qui fournit des fonctionnalités côté client et côté serveur via les API client et serveur.
Voici une vidéo utile expliquant les capacités de programmation asynchrone du côté client, qui permettent d’accélérer considérablement les demandes d’API.
Voici les principales caractéristiques d’AIOHTTP :
- Prise en charge des fonctionnalités du serveur et du client HTTP
- Prise en charge de la journalisation pour faciliter le débogage ; fournit une journalisation pour un client, un serveur, des sockets web, etc
- Support natif pour les tests à travers le plugin de test pytest : pytest-aiohttp, qui est disponible en tant que paquetage PyPI
Tornado
Tornado est un autre framework web Python qui supporte les réseaux asynchrones. Ces dernières années, il y a eu de nombreuses versions stables de Tornado – la version la plus récente, la 6.2, a été publiée en juillet 2022. Actuellement, Tornado prend en charge Python 3.7 et les versions ultérieures.
Comme la plupart des paquets de cette liste, Tornado peut également être installé à l’aide de pip
:
$ pip install tornado
Voici les principales caractéristiques de Tornado :
- Prise en charge du serveur HTTP
tornado.httpserver
et du client - Évolutif et utilise des E/S réseau non bloquantes
- Bien adapté aux applications qui requièrent une connectivité pour un intervalle de temps beaucoup plus long
- Utilitaires pour la journalisation, les tests unitaires, etc
- Intégration transparente avec des services d’authentification
Meinheld
Meinheld est un serveur WSGI pour Python. Il utilise et construit des bibliothèques existantes pour la gestion des événements et le traitement des requêtes HTTP.
Vous pouvez installer Meinheld en utilisant pip :
$ pip install meinheld
Quelques caractéristiques de Meinheld :
- Utilise la bibliothèque
http-parser
pour traiter les requêtes HTTP entrantes - S’appuie sur la bibliothèque
picoev
pour la gestion des événements
Conclusion
J’espère que cet article sur les serveurs web Python vous a été utile. N’hésitez pas à les essayer dans vos futurs projets. Nous avons énuméré les principales fonctionnalités ; pour comprendre pleinement les dépendances et leur fonctionnement, vous devrez les utiliser dans vos applications. 👩🏽💻
Si vous souhaitez améliorer vos compétences en Python, vous pouvez consulter la bibliothèque de tutoriels Python de Geekflare. Bon codage !