Comment créer un serveur local en Python : le guide complet pas à pas

Créer un serveur local en Python se fait avec une seule ligne de commande, sans rien installer.

  • Tapez python3 -m http.server depuis le dossier à partager.
  • Le serveur écoute par défaut sur le port 8000.
  • Accédez-y via localhost:8000 ou 127.0.0.1:8000.
  • Aucun pip install ni configuration nécessaire.
  • Le terminal reste bloqué pendant l’exécution du serveur.
  • Arrêtez avec Ctrl + C, tout fonctionne sans Internet.

Lancer et démarrer un serveur local avec http.server

Python intègre un module dédié au service web : inutile d’installer quoi que ce soit. Une seule ligne dans le terminal suffit à transformer n’importe quel dossier en site accessible depuis un navigateur, et le serveur est opérationnel en moins d’une minute.

  • Une ligne de commande : tapez python3 -m http.server et appuyez sur Entrée depuis le dossier à partager.
  • Port 8000 par défaut : sans précision, le serveur écoute sur le port 8000, accessible via localhost:8000.
  • Terminal bloqué pendant exécution : la fenêtre reste occupée tant que le serveur tourne, un second onglet est nécessaire pour d’autres commandes.
  • Fonctionne sans Internet : tout se passe en local, aucune connexion externe n’est requise.
  • python, -m, http.server expliqués : python appelle l’interpréteur, -m exécute un module, http.server désigne le module HTTP natif.

La commande se décompose simplement : vous demandez à Python d’exécuter le module http.server comme un programme. Aucune bibliothèque externe, aucun fichier de configuration, aucun pip install. Le serveur s’appuie sur l’adresse de bouclage 127.0.0.1, ce qui signifie qu’il n’est visible que depuis votre propre machine par défaut.

Pour arrêter le serveur, un simple Ctrl + C dans le terminal suffit. Si vous fermez la fenêtre, le processus s’interrompt aussi. Cette légèreté explique pourquoi cet outil reste idéal pour tester une page HTML, un site statique ou des fichiers JavaScript en quelques secondes, sans rien déployer en ligne.

Accéder et tester le serveur depuis le navigateur

comment créer un serveur local en python

Ouvrir l’URL locale dans le navigateur

Une fois le serveur lancé, ouvrez votre navigateur et saisissez l’adresse d’accès. Voici ce que vous devez taper et ce que vous allez observer :

  • http://localhost:8000 : adresse à saisir dans la barre du navigateur
  • http://127.0.0.1:8000 : adresse équivalente, même résultat
  • Code 200 dans les logs : la requête a abouti correctement
  • Une ligne par visite : le terminal enregistre chaque accès

Le mot localhost désigne votre propre ordinateur, et 8000 correspond au port utilisé par le serveur. Sur macOS et Linux, 127.0.0.1 est l’adresse de liaison loopback par défaut, celle qui pointe vers votre machine sans passer par le réseau. Les deux écritures mènent donc exactement au même endroit.

Pourquoi un serveur HTTP plutôt que file://

Ouvrir un fichier HTML en double-cliquant dessus fonctionne pour une page statique simple. Mais cette méthode affiche l’URL sous forme file://, et c’est là que les problèmes commencent.

Un serveur HTTP répond à des règles que le protocole file:// ne respecte pas. Résultat : les imports ES, les appels fetch(), les service workers et les requêtes AJAX se cassent silencieusement. Votre JavaScript semble inerte, alors que le code est correct.

C’est particulièrement vrai dès que vous chargez un fichier JSON dynamique ou que vous testez une API locale. Le navigateur applique des restrictions de sécurité qu’un vrai serveur lève. Pour du contenu statique pur, la différence reste mince, mais dès qu’une ligne de script doit récupérer des données, le serveur devient indispensable.

Changer de port (8000, 5555, 8888)

Par défaut, le serveur http.server écoute sur le port 8000. Ce numéro est le port de référence dans la quasi-totalité des exemples et tutoriels. Il suffit toutefois d’ajouter un argument pour en changer librement.

  • Port 8000 par défaut : aucun argument n’est nécessaire, le serveur s’y place automatiquement.
  • Syntaxe avec numéro : python -m http.server [PORT], le port se place à la fin de la commande.
  • Exemples courants : 5555 ou 8888, ce dernier étant souvent utilisé pour les scripts CGI.
  • Port libre obligatoire : un port déjà utilisé par une autre application provoque une erreur de démarrage.
  • Analogie immeuble et appartement : l’IP est l’adresse de l’immeuble, le port est le numéro d’appartement.

Le choix du port n’a aucune incidence sur le contenu servi. Seule la dernière partie de l’URL change, par exemple localhost:5555 au lieu de localhost:8000.

Si un port alternatif comme 3000 ou 8080 est réclamé, la même règle s’applique : on l’indique à la fin de la commande et le serveur s’y attache. En cas de conflit, testez un numéro proche.

Options de la commande http.server (répertoire, interface)

Cibler un répertoire précis avec -d

Par défaut, le serveur http.server partage le dossier dans lequel vous vous trouvez au moment de lancer la commande. Si vous voulez exposer un autre dossier sans avoir à vous déplacer dans le terminal, utilisez l’option -d (ou , directory). Le principe reste le même : vous indiquez le chemin du répertoire à servir, et Python s’occupe du reste.

Concrètement, la commande python -m http.server 8000 -d /chemin/vers/mon-site lance le serveur sur le port 8000 en pointant directement sur le dossier choisi. Pratique pour tester rapidement un projet rangé ailleurs sur le disque.

Choisir l’interface réseau avec -b et 0.0.0.0

L’option -b (ou , bind) contrôle l’adresse sur laquelle le serveur écoute. Voici les comportements à connaître :

  • Défaut : le serveur écoute sur toutes les adresses disponibles
  • -b : permet de restreindre l’écoute à une interface précise
  • 127.0.0.1 : limite l’accès à localhost uniquement
  • 0.0.0.0 : expose le serveur à tout le réseau
  • index.html : un fichier même vide masque le listing du dossier

Retenez surtout la différence entre 127.0.0.1 et 0.0.0.0. La première adresse, dite de loopback, garde le serveur accessible seulement depuis votre machine. La seconde l’ouvre à l’ensemble du réseau local, ce qui est nécessaire pour tester depuis un téléphone mais expose aussi vos fichiers à tous les appareils connectés. À utiliser en connaissance de cause.

Partager le serveur sur le réseau local

Par défaut, votre serveur Python n’est accessible que depuis votre propre machine via 127.0.0.1. Pour l’ouvrir aux autres appareils du même réseau WiFi, il faut le relancer avec , bind 0.0.0.0. Cette adresse signifie « écouter sur toutes les interfaces réseau » et rend le serveur visible sur tout le réseau.

Une fois lancé, récupérez l’adresse IP locale de votre ordinateur (souvent au format 192.168.x.x). Depuis un téléphone ou une autre machine connectée au même WiFi, tapez http://[IP-locale]:8000 dans le navigateur. Le site s’affiche instantanément, ce qui est idéal pour tester un rendu mobile sans déployer quoi que ce soit.

Attention : exposer sur 0.0.0.0 rend le serveur accessible à toute personne du réseau. Réservez ce partage à un usage ponctuel, en environnement de confiance, et coupez le serveur dès que le test est terminé.

Limites et sécurité du serveur Python

Le module http.server est mono-thread : il traite une seule requête à la fois. Si vous ouvrez plusieurs onglets simultanément, les chargements se mettent en file d’attente. Ce comportement suffit pour tester une page, mais devient vite pénible avec des ressources nombreuses.

Côté sécurité, aucun chiffrement n’est mis en place et aucun mécanisme d’authentification n’est proposé. Dès que vous utilisez 0.0.0.0, n’importe quel appareil du réseau peut lire vos fichiers. Réservez cet usage à des documents non sensibles et à un réseau de confiance.

Ce serveur ne remplace pas Apache, Nginx ou un serveur WSGI. Il n’est pas conçu pour la production : pas de gestion de trafic important, pas de journalisation avancée, pas de règles de sécurité. Utilisez-le pour vos tests, votre apprentissage et votre développement local uniquement.

Prérequis : vérifier que Python est installé

Avant de lancer la moindre commande http.server, assurez-vous que l’interpréteur Python est bien présent sur votre machine. Sans lui, aucune des commandes présentées dans ce guide ne fonctionnera, et l’erreur renvoyée serait de type « command not found » ou « python n’est pas reconnu ».

Vérifier la version installée

Ouvrez un terminal (ou une invite de commandes sous Windows) et tapez python, version, ou python3, version selon votre système. Si un numéro de version s’affiche, l’installation est opérationnelle et vous pouvez passer directement au lancement du serveur. Le module http.server est intégré à la bibliothèque standard : il n’y a rien à installer en plus.

Préinstallé sur Linux et macOS

Sur Linux et macOS, Python est généralement livré d’origine avec le système, ce qui vous évite toute manipulation préalable. Vous pouvez donc tester la commande de vérification immédiatement après avoir ouvert le terminal, sans passer par un gestionnaire de paquets.

Installation manuelle sous Windows

Sous Windows, Python n’est pas fourni par défaut : il faut le télécharger et l’installer manuellement depuis le site officiel python.org. Pensez à cocher l’option qui ajoute Python au PATH pendant l’installation, sinon la commande python, version restera introuvable.

Python 2 ou Python 3 : quelle syntaxe utiliser

  • Python 2 : le module s’appelait SimpleHTTPServer, commande obsolète et non recommandée.
  • Python 3 : le module http.server est la référence actuelle pour tout serveur local.
  • Version détectée : si python3, version renvoie 3.x, vous êtes sur la bonne voie.
  • Astuce rapide : en cas de doute, testez python3 -m http.server, il échoue proprement si absent.