Bac à sable Python
Exécutez Python 3 dans votre navigateur via Pyodide (CPython sur WebAssembly). Stdlib complète, pip via micropip, session persistante, hors ligne après premier chargement.
Bac à sable Python - Exécuter Python en ligne gratuitement
Python est le langage de programmation le plus enseigné au monde et l'outil dominant de la data science, du machine learning, du calcul scientifique, du scripting système et du back-end web rapide — mais chaque débutant passe sa première heure à se battre avec une installation locale : quel interpréteur (Python système, Anaconda, pyenv ?), quelle stratégie venv, quel IDE, où est pip. Ce bac à sable saute tout cela. L'interpréteur CPython entier a été compilé en WebAssembly par le projet Pyodide de la Mozilla Foundation (utilisé dans JupyterLite, la doc Pandas, et des dizaines de plateformes éducatives) et chargé directement dans votre onglet navigateur. Après un téléchargement unique d'environ 6 Mo la première fois, chaque exécution suivante est instantanée et fonctionne entièrement hors ligne. Vous obtenez Python 3.11+ avec la bibliothèque standard complète — os, sys, math, json, datetime, re, collections, itertools, functools, statistics, random — plus l'option de charger NumPy, Pandas, SciPy, Matplotlib, scikit-learn, sympy et autres gros paquets de data science à la demande via micropip. Le contexte d'exécution persiste entre les runs (définissez une fonction, puis appelez-la plus tard sans la redéfinir), le système de fichiers est virtuel dans votre navigateur, et les seules choses qui ne fonctionnent pas sont les appels réseau (urllib/requests/socket), les toolkits GUI natifs (Tkinter, PyQt), et les paquets avec extensions C non portées en WASM.
Qu'est-ce que le bac à sable Python ?
Il s'agit d'un interpréteur Python 100% navigateur basé sur Pyodide. Il permet de :
- Lancer du code sans installer Python
- Tester des extraits en quelques secondes
- Apprendre Python de façon interactive
- Expérimenter et déboguer
- Continuer à travailler hors ligne après le premier chargement
La plupart des fonctionnalités Python 3.x et de la bibliothèque standard sont disponibles.
Comment utiliser cet outil ?
Mode d'emploi :
1. Attendez le chargement initial de Pyodide
2. Saisissez ou collez votre code dans l'éditeur
3. Cliquez sur "Exécuter le code"
4. Analysez le résultat dans la console
5. Utilisez "Effacer" pour nettoyer l'éditeur
6. Chargez les exemples intégrés pour progresser plus vite
L'environnement persiste entre deux lancements : variables et fonctions restent disponibles jusqu'à la réinitialisation.
Quelles fonctionnalités Python sont gérées ?
La sandbox supporte la majorité de Python 3.x :
- Syntaxe complète (variables, boucles, conditions)
- Fonctions, classes et objets
- Listes, dictionnaires, ensembles, tuples
- Manipulation de chaînes et formatage
- I/O fichiers via le système virtuel
- Bibliothèque standard (majoritairement)
- Gestion des exceptions
- Décorateurs, générateurs et compréhensions
Limites :
- Pas de requêtes réseau (fetch, urllib)
- Pas de GUI (tkinter, pygame)
- Threading restreint
- Certains modules avec extensions C sont indisponibles
Mon code est-il privé ?
Oui :
- Tout s'exécute localement dans votre navigateur
- Aucun code n'est envoyé vers nos serveurs
- Aucune journalisation ni collecte
- Fonctionne hors ligne après chargement
- L'environnement Pyodide est isolé et ne peut pas accéder à votre système
Votre code reste donc confidentiel.
Puis-je installer des packages ?
Pyodide inclut de nombreux modules. Pour installer d'autres packages :
- Les bibliothèques purement Python fonctionnent souvent
- Celles qui nécessitent des extensions C peuvent échouer
- Utilisez `micropip` pour installer depuis PyPI
Exemple :
import micropip
await micropip.install('package-name')
Tous les packages PyPI ne sont pas encore compatibles.
Pourquoi mon requests.get() ou urllib échoue avec une erreur de pas d'internet ?
Parce que Pyodide s'exécute dans le bac à sable WebAssembly du navigateur, qui par conception n'a PAS d'accès direct aux sockets réseau. La bibliothèque 'requests' et urllib sont construites sur des sockets TCP bruts, que le bac à sable n'expose pas. Deux contournements : (1) Utilisez pyodide.http.pyfetch, qui enveloppe l'API fetch() native du navigateur et fonctionne pour HTTP/HTTPS. Remplacez 'requests.get(url).json()' par 'await pyodide.http.pyfetch(url).then(r => r.json())' (en contexte async). (2) Installez le paquet patch aiohttp-wasm ou 'pyodide-http' qui patche requests pour router via fetch en coulisses. Le serveur distant doit toujours envoyer des en-têtes CORS (Access-Control-Allow-Origin) sinon le navigateur bloquera la réponse — c'est une règle de sécurité du navigateur, pas une limitation Pyodide. Pour l'expérimentation purement locale, simulez la réponse API avec un dict et sautez complètement l'appel HTTP.

Puis-je utiliser NumPy ou Pandas dans ce bac à sable ?
Oui. Les deux sont des paquets Pyodide pré-construits et se chargent à la demande via micropip — pas d'étape de compilation. Exécutez ceci une fois dans votre code :
import micropip
await micropip.install(['numpy', 'pandas', 'matplotlib'])
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
La première installation prend quelques secondes (télécharge ~10-20 Mo de binaires compilés en WASM) mais est ensuite cachée pour toujours. Après cela, les opérations d'array NumPy s'exécutent à une vitesse proche de native (le NumPy de Pyodide est véritablement rapide), les DataFrames Pandas fonctionnent normalement, et Matplotlib rend du SVG/PNG que vous pouvez afficher via plt.show() — les hooks d'affichage de Pyodide rendent l'image directement dans le panneau de sortie. La liste complète des paquets scientifiques pré-construits inclut scipy, scikit-learn, sympy, statsmodels, networkx, pillow, beautifulsoup4, lxml, regex, et bien d'autres. Consultez pyodide.org/en/stable/usage/packages-in-pyodide.html pour l'index complet.
Comment réinitialiser l'interpréteur ou effacer toutes les variables entre les exécutions ?
C'est la frustration la plus courante avec tout REPL persistant : le contexte d'exécution survit entre les exécutions, donc une variable, fonction, import ou monkey-patch que vous avez défini plus tôt est encore en vie à l'exécution suivante. C'est intentionnel (cela permet de construire un état de manière interactive, exactement comme un notebook Jupyter), mais cela signifie aussi qu'une variable globale obsolète peut silencieusement fausser des résultats ultérieurs. Cliquer sur « Effacer » n'efface que le texte de l'éditeur — cela NE touche PAS l'espace de noms Python. Pour repartir vraiment de zéro, cliquez sur « Réinitialiser l'interpréteur » : il supprime chaque nom défini par l'utilisateur de globals(), rétablit la capture de stdout/stderr et vous donne un espace de noms neuf SANS retélécharger le runtime Pyodide de ~6 Mo (donc c'est instantané, contrairement au rechargement de la page). Vous pouvez aussi appuyer sur Ctrl+Entrée (Cmd+Entrée sur Mac) pour exécuter le code directement au clavier. Si vous préférez le faire en code, exécutez : for _n in list(globals()):
if not _n.startswith('__'): del globals()[_n] — mais le bouton est plus rapide et réinitialise aussi les tampons de sortie.
Pourquoi input() ne fonctionne-t-il pas, et comment lire stdin ?
Rechercher « python input() not working online » amène presque tout le monde ici. L'input() standard de CPython se bloque en attendant un stdin de terminal réel, que le bac à sable du navigateur ne fournit pas, donc un simple appel input() lèvera une erreur ou se figera. Il existe trois approches pratiques dans Pyodide : (1) Remplacez input() par la boîte de dialogue prompt du navigateur — Pyodide redéfinit le builtin de sorte que input('Votre nom ? ') affiche une boîte prompt() JavaScript et renvoie le texte saisi. Cela fonctionne d'emblée pour les scripts simples. (2) Pour une entrée multiligne ou en pipe, préchargez les données dans votre code au lieu de les lire interactivement : data = '''ligne1\nligne2\nligne3'''.splitlines() puis itérez. (3) Pour tester du code qui appelle input() plusieurs fois, patchez le builtin : reponses = iter(['Anne', '42']); import builtins; builtins.input = lambda prompt='': next(reponses). Cela fournit des réponses prédéfinies sans dialogues et c'est la façon la plus propre de démontrer ou tester des scripts interactifs.
Puis-je téléverser un fichier, le lire ou télécharger un fichier généré par mon script ?
Oui — Pyodide donne à chaque onglet un véritable système de fichiers virtuel en mémoire (MEMFS), donc open(), os.path, pathlib, csv, json et read_csv/to_csv de Pandas fonctionnent normalement sur des chemins virtuels. Pour faire ENTRER un fichier externe, lisez-le en JavaScript et écrivez-le dans le FS, ou utilisez pyodide.FS.writeFile('/data.csv', bytes) ; puis en Python il suffit de open('/data.csv'). Pour faire SORTIR un fichier généré, écrivez-le normalement (open('out.csv','w') ou df.to_csv('out.csv')), puis lisez les octets avec pyodide.FS.readFile('out.csv') et déclenchez un téléchargement du navigateur via un Blob. Un flux courant en science des données : charger un CSV dans le FS, exécuter une analyse pandas, écrire un CSV résultat ou un PNG Matplotlib, puis le télécharger. Tout vit uniquement dans la mémoire de votre navigateur — rien n'est envoyé à un serveur, et les fichiers disparaissent au rechargement (utilisez Réinitialiser l'interpréteur pour effacer l'état Python sans vider le FS, ou rechargez la page pour une réinitialisation totale).
À quoi servent les exemples de code ?
Ils accélèrent votre apprentissage :
- Comprendre rapidement la syntaxe Python
- Observer des patterns prêts à l'emploi
- Tester des structures de données courantes
Les exemples couvrent :
- Hello World
- Boucles et conditions
- Fonctions
- Listes et dictionnaires
- Classes et POO
Un clic charge l'exemple dans l'éditeur pour l'exécuter immédiatement.
Fonctionnalités clés
- Exécuter du Python 3.x dans le navigateur
- Exécution instantanée au clavier avec Ctrl+Entrée (Cmd+Entrée sur Mac)
- Bouton Réinitialiser l'interpréteur pour un espace de noms propre sans recharger
- Les figures Matplotlib s'affichent directement dans le panneau de sortie
- Aucune installation ni inscription
- Résultats instantanés dans la console
- Éditeur avec coloration syntaxique
- Exemples prêts à l'emploi
- Messages d'erreur et stack trace
- Mesure du temps d'exécution
- Téléchargement du code en .py
- Nettoyage et réinitialisation rapides
- Fonctionne hors ligne après chargement
- 100% côté client : votre code ne quitte jamais le navigateur
- Mode sombre disponible
- Interface responsive adaptée au mobile
- Propulsé par Pyodide (CPython en WebAssembly)
