9 serveurs Web Python à essayer pour votre prochain projet
Dans cet article, nous allons explorer différents serveurs Web Python que vous pouvez utiliser pour déployer vos applications.
Nous allons d'abord nous pencher sur le fonctionnement des serveurs Web et sur l'importance des interfaces de passerelle de serveur. Ensuite, nous examinerons une liste de serveurs Web Python, en soulignant leurs fonctionnalités essentielles. La plupart de ces serveurs sont disponibles sous forme de packages PyPI, que vous pouvez facilement installer et utiliser dans vos projets.
C'est parti !
Qu'est-ce qu'un serveur Web ?
Lors du développement d'une application Python, vous utilisez un serveur de développement pour tester. Cependant, une fois le développement terminé, vous devez déployer votre application sur un serveur de production. Un serveur Web doit posséder les fonctionnalités de base d'un serveur HTTP, parmi plusieurs autres couches de fonctionnalités supplémentaires.
Un serveur Web Python doit être capable de gérer les requêtes HTTP (comme GET, PUT et POST) provenant de clients tels que les navigateurs Web et de renvoyer une réponse. Cette réponse peut inclure un code d'état HTTP indiquant si la demande a été traitée avec succès ou non. Elle peut également contenir des pages Web HTML ou des données semi-structurées comme JSON, XML, etc.
ASGI vs WSGI : Comprendre les passerelles de serveur
Imaginez que vous avez créé une application Python avec un framework tel que Django ou Flask. Un serveur conventionnel pourrait avoir des difficultés à comprendre et à traiter les requêtes adressées à cette application. C'est là qu'interviennent les interfaces de passerelle de serveur.
Cette passerelle 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 et la redirige vers l'interface de la passerelle du serveur. Cette interface (WSGI ou ASGI) communique avec l'application Python via un callable exposé.
L'interface de passerelle de serveur Web (WSGI) gère les requêtes de manière séquentielle. Si plusieurs requêtes HTTP sont lentes, cela impacte le débit.
L'interface de passerelle de serveur asynchrone (ASGI), successeur de WSGI, a la capacité de traiter les requêtes de façon asynchrone.
Par exemple, si une requête en cours de traitement nécessite une lecture de base de données (qui peut prendre du temps) et attend une réponse, ASGI peut gérer une deuxième requête entrante pendant que la première est en attente.
Contrairement à WSGI, où la première requête doit être entièrement traitée avant que la seconde puisse commencer, l'utilisation d'ASGI peut donc entraîner un meilleur débit. De plus, ASGI permet d'utiliser les fonctionnalités asynchrones de Python dans votre application.
Serveurs Web Python
Voici une liste de serveurs Web que vous pouvez utiliser pour vos applications Python. Nous avons également inclus certains frameworks qui proposent une prise en charge intégrée de serveurs prêts pour la production. Cette liste n'est pas exhaustive et l'ordre des serveurs Web ci-dessous n'est pas significatif.
Uvicorn
Si vous êtes familier avec le développement d'applications avec FastAPI, vous avez probablement déjà croisé Uvicorn, une implémentation de serveur Web. Uvicorn est un serveur ASGI pour Python.

Pour installer Uvicorn et ses dépendances avec 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 dans un environnement Python asynchrone
- Outil en ligne de commande avec de nombreuses options
- Prise en charge des applications à partir de fonctions d'usine
- Fonctionnalités pour contrôler les instances de serveur par programmation
Gunicorn
Gunicorn est un serveur WSGI pour les applications Python, réputé pour ses capacités de gestion de processus avancées.

Uvicorn propose une classe de travail Gunicorn, permettant de bénéficier à la fois des avantages de performance et de gestion de processus. Consultez la documentation pour plus de détails sur le déploiement de Gunicorn.
Si vous avez Python 3.5 ou une version ultérieure, vous pouvez installer Gunicorn avec 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 avec un serveur proxy HTTP
- Gestion avancée des processus
CherryPy
CherryPy est un framework Web Python, tout comme Django, Flask et FastAPI, mais moins populaire. Cependant, avec plusieurs versions stables, CherryPy existe et a évolué depuis plus d'une décennie pour devenir un framework complet, soutenu par une communauté de développeurs.

Vous pouvez consulter le Zen de CherryPy, qui exprime l'idée que CherryPy est un framework simple et minimaliste, mais puissant.
Bien que CherryPy soit un framework et non un serveur Web, il est inclus dans cette liste car il prend en charge un serveur de production natif, ce qui n'est pas le cas de la plupart des autres frameworks.
Pour installer CherryPy et commencer, exécutez :
$ pip install CherryPy
Voici les principales caractéristiques de CherryPy :
- Framework Pythonique utilisant la programmation orientée objet, idéal pour les débutants
- Prise en charge d'un serveur HTTP de production, Cheroot
- Plus facile à apprendre que d'autres frameworks Web comme Django
- Prise en charge de la création et du déploiement d'applications Web simples sur des microservices
Daphne
Django est l'un des frameworks Web Python les plus utilisés. Si vous avez déjà développé des applications avec Django, vous avez probablement utilisé le serveur Web Daphne. Daphne est une des premières implémentations de serveur ASGI et sert de référence pour les autres implémentations.
Daphne est disponible sous forme de package PyPI et peut être installé avec pip.
$ pip install daphne
Voici un tutoriel détaillé qui vous guide dans la création d'une application Python complète prête pour la production.

Voici les principales caractéristiques de Daphne :
- Largement adopté en environnements de production
- Référence pour toutes les implémentations de serveur ASGI
- Prise en charge des protocoles HTTP, HTTP2 et WebSocket
Trio Python
Le projet Trio vise à fournir des capacités d'E/S asynchrones pour la production, en prenant en charge les E/S parallèles et la concurrence. Ce projet propose également plusieurs bibliothèques Web et HTTP Python.

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 : Un serveur ASGI qui prend en charge HTTP
- muffin : Un framework Web ASGI pour Python
- startlette : Un framework ASGI léger
- trio-websocket : Prise en charge des serveurs et clients WebSocket
- httpx : Un client HTTP pour Python
Twisted
Twisted est un framework pour les applications Python. Il comprend un module de programmation Web appelé twisted.web.
Vous pouvez installer Twisted et ses modules associés avec pip :
$ pip install Twisted
Voici les principales caractéristiques de Twisted :
- Fonctionnalités pratiques pour les développeurs, comme les tests unitaires et la vérification statique de code
- twisted.web fournit un serveur WSGI et une prise en charge pour les clients et serveurs HTTP
AIOHTTP
AIOHTTP est une bibliothèque Python offrant des fonctionnalités côté client et serveur via des API dédiées.
Voici une vidéo intéressante expliquant les capacités de programmation asynchrone côté client pour accélérer considérablement les requêtes API.

Voici les principales caractéristiques d'AIOHTTP :
- Prise en charge des fonctionnalités serveur et client HTTP
- Prise en charge de la journalisation pour faciliter le débogage (client, serveur, sockets Web, etc.)
- Prise en charge native des tests via le plug-in pytest, pytest-aiohttp, disponible en tant que package PyPI
Tornado
Tornado est un autre framework Web Python qui prend en charge la mise en réseau asynchrone. Plusieurs versions stables de Tornado sont sorties ces dernières années. La version la plus récente, 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 packages de cette liste, Tornado peut être installé avec pip :
$ pip install tornado
Voici les principales caractéristiques de Tornado :
- Prise en charge du serveur HTTP tornado.httpserver et client
- Évolutif et utilise des E/S réseau non bloquantes
- Idéal pour les applications nécessitant une connectivité prolongée
- Utilitaires pour la journalisation, les tests unitaires, etc.
- Intégration avec les services d'authentification
Meinheld
Meinheld est un serveur WSGI pour Python. Il utilise des bibliothèques existantes pour la gestion d'événements et le traitement des requêtes HTTP.
Vous pouvez installer Meinheld avec pip :
$ pip install meinheld
Voici quelques caractéristiques de Meinheld :
- Utilise la bibliothèque http-parser pour gérer les requêtes HTTP
- S'appuie sur la bibliothèque picoev pour la gestion des événements
Conclusion
J'espère que cette liste de serveurs Web Python vous sera utile. N'hésitez pas à les tester dans vos futurs projets. Nous avons mentionné les principales caractéristiques, mais pour bien comprendre leur fonctionnement et leurs dépendances, il faut les utiliser dans vos applications. 👩🏽💻
Si vous souhaitez améliorer vos compétences en Python, n'hésitez pas à consulter la bibliothèque de tutoriels Python de toptips.fr. Bon codage !