Skip to content

Convertir Python en EXE : Runcell, PyInstaller, Nuitka et cx_Freeze

Mis à jour le

Convertissez un script Python en EXE directement dans le navigateur avec Runcell, puis comparez PyInstaller, Nuitka et cx_Freeze. Avec un exemple exécutable et les commandes de packaging pour Windows.

Pour convertir Python en EXE, commencez par le convertisseur Python vers EXE de Runcell (opens in a new tab). Ajoutez un fichier .py, un dossier de projet ou un ZIP, choisissez le script qui lance votre application, vérifiez ses dépendances et sélectionnez Build Windows EXE. Téléchargez le résultat et partagez-le avec des utilisateurs Windows qui n'ont pas Python installé.

Un EXE embarque votre programme avec le runtime et les fichiers dont il a besoin. Renommer script.py en script.exe ne fait rien de tout cela. Ce guide présente d'abord Runcell, explique comment un navigateur peut générer le binaire, puis donne les commandes de trois outils de packaging locaux. Runcell est un produit Kanaries, et c'est le workflow dans le navigateur que nous recommandons.

Choisir une méthode pour convertir Python en EXE

MéthodeÀ choisir siOù se fait le build
Runcell (opens in a new tab), notre premier choixVous avez un script ou un projet en mode console (ligne de commande) et voulez un EXE Windows x64 sans installer d'outil de packagingDans votre navigateur, sur votre appareil
PyInstallerVous voulez une commande Python qui produit un dossier ou un exécutable unique, ou vous packagez une application graphique (Tkinter, PySide/PyQt)Un environnement Python sous Windows pour un build Windows
NuitkaVous voulez compiler Python et configurer une chaîne de compilation nativeUn environnement Python sous Windows, plus un compilateur C pris en charge
cx_FreezeVous voulez distribuer un dossier d'application et maintenir sa configuration de buildUn environnement Python sous Windows pour un build Windows

Les commandes ci-dessous utilisent Windows PowerShell. Seules les méthodes locales vous demandent d'installer vous-même ces outils de packaging.

Méthode 1 : convertir Python en EXE avec Runcell

Commencer avec un petit script reproductible

Enregistrez cet exemple sous le nom receipt.py. Il affiche un reçu, calcule le total et attend la touche Entrée, pour que la fenêtre de console reste ouverte après un double-clic. Il n'a aucune dépendance tierce ni fichier supplémentaire.

items = {"Notebook": 19.50, "Cable": 8.25, "Stand": 12.25}
 
print("Receipt")
for name, price in items.items():
    print(f"{name}: ${price:.2f}")
 
print(f"Total: ${sum(items.values()):.2f}")
input("Press Enter to close...")

Si Python est déjà installé sur votre machine, vérifiez le code source avant de le packager :

python receipt.py

Le total doit être Total: $40.00. Appuyez sur Entrée pour terminer. Si c'est votre premier script, notre guide pour exécuter des scripts Python explique comment configurer le terminal.

Ajouter le projet et lancer le build

  1. Ouvrez le convertisseur Python vers EXE de Runcell (opens in a new tab) et descendez jusqu'au convertisseur sur la page.
  2. Choisissez votre fichier receipt.py. Pour une application console existante, sélectionnez plutôt son dossier de projet ou un ZIP, avec les modules et les ressources qu'elle utilise.
  3. Sélectionnez receipt.py comme script d'entrée. Dans un projet plus grand, c'est le script que vous lancez d'habitude pour démarrer l'application, par exemple main.py.
  4. Vérifiez les imports, les dépendances et les fichiers inclus qui ont été détectés. L'exemple du reçu n'a besoin d'aucun package supplémentaire. Pour votre propre application, vérifiez que les ressources nécessaires et les versions des packages correspondent au projet que vous voulez distribuer. Le runtime de Runcell est Python 3.14 : chaque package doit donc disposer d'une wheel qui fonctionne sous Windows avec Python 3.14 (une wheel cp314, abi3 ou en pur Python).
  5. Sélectionnez Build Windows EXE, puis téléchargez l'exécutable généré. Ouvrez-le sous Windows et vérifiez l'affichage du reçu avant de le partager.

Lors de notre test dans le navigateur, Runcell a généré et téléchargé receipt.exe. Son en-tête de fichier l'identifie comme un exécutable Windows x64. Nous n'avons pas lancé cet EXE sous Windows.

Pour un projet de plusieurs fichiers, gardez l'arborescence des dossiers intacte. Un modèle chargé depuis templates/invoice.html doit être inclus au chemin que votre application attend.

Comment un navigateur génère un EXE Windows

Le moteur de packaging de Runcell combine un lanceur Windows précompilé, un runtime Python, les fichiers de votre projet et ses dépendances. Il assemble ces composants en un .exe téléchargeable, sur votre appareil. Comme les composants Windows sont déjà compilés, le navigateur peut construire le binaire final sans lancer de compilateur Windows en local.

Le workflow comporte deux étapes distinctes :

Your Python project + dependencies
                +
Python runtime + precompiled Windows launcher
                |
                v
Runcell assembles the EXE in your browser
                |
                v
Download the file, then run it on Windows

Générer un fichier et l'exécuter sont deux opérations différentes : le navigateur assemble l'exécutable, et c'est Windows qui lance l'application terminée. Le guide de Runcell sur ce mécanisme (opens in a new tab) décrit ce processus de packaging.

Ce qui reste sur votre appareil

Runcell construit l'EXE dans votre navigateur. Si votre projet importe un module que son runtime Windows embarqué ne contient pas, le convertisseur vous le signale avant le build ; supprimez cet import ou utilisez l'un des outils de packaging locaux ci-dessous.

Votre code source et vos secrets restent sur votre appareil pendant le build. L'EXE final contient votre code : n'y embarquez donc aucun secret que vous ne partageriez pas.

Méthode 2 : faire le build en local avec PyInstaller

PyInstaller (opens in a new tab) rassemble votre script, ses imports et le runtime Python dans une application distribuable. Pour obtenir un EXE Windows, lancez PyInstaller sous Windows : il produit un build pour le système d'exploitation sur lequel il tourne.

Ouvrez PowerShell dans le dossier qui contient receipt.py. Créez un environnement virtuel et installez-y PyInstaller. Si vous avez installé Python depuis python.org, le lanceur py fonctionne même quand python n'est pas dans le PATH, et appeler directement le Python de l'environnement évite l'étape d'activation :

py -m venv .venv
.\.venv\Scripts\python.exe -m pip install pyinstaller
.\.venv\Scripts\python.exe -m PyInstaller --onefile receipt.py

Le résultat est dist\receipt.exe. Lancez-le depuis PowerShell pour voir sa sortie :

.\dist\receipt.exe

Pour votre propre projet, installez ses dépendances dans le même environnement avant le build. S'il a un requirements.txt, utilisez .\.venv\Scripts\python.exe -m pip install -r requirements.txt.

L'appel -m PyInstaller, sensible à la casse, est documenté dans le guide d'installation (opens in a new tab). Il garde l'outil de packaging et vos dépendances dans le même environnement Python.

Choisir le mode console, GUI ou un build en dossier

Gardez le mode console pour receipt.py, puisqu'il utilise print() et input(). Pour une application graphique qui gère toutes les interactions dans ses propres fenêtres, --windowed masque la console. Commencez par --onedir si vous voulez inspecter l'application et ses fichiers annexes dans un dossier, puis passez à --onefile pour proposer un seul fichier à télécharger. Consultez la référence des options de PyInstaller (opens in a new tab).

Pour inclure un dossier assets, ajoutez-le explicitement :

.\.venv\Scripts\python.exe -m PyInstaller --onefile --add-data "assets:assets" receipt.py

Cet exemple suppose que vous avez créé un dossier assets. Pour les fichiers embarqués en lecture seule, résolvez les chemins par rapport à __file__, comme l'explique le guide d'exécution de PyInstaller (opens in a new tab). Notre guide Python pathlib détaille les opérations sur les chemins.

Méthode 3 : compiler et packager avec Nuitka

Nuitka (opens in a new tab) compile Python et peut créer des applications distribuables. Choisissez-le si vous voulez garder la main sur un build basé sur un compilateur. Il vous faut un compilateur C pris en charge ; sous Windows, le manuel cite notamment Visual Studio 2022 ou plus récent. Le manuel précise aussi que MinGW64 ne fonctionne pas avec Python 3.13 ou plus récent sans une option expérimentale : avec un Python actuel, prévoyez d'installer les Visual Studio Build Tools.

Dans le même type d'environnement virtuel, installez Nuitka et demandez son mode fichier unique (onefile) :

py -m venv .venv
.\.venv\Scripts\python.exe -m pip install nuitka
.\.venv\Scripts\python.exe -m nuitka --mode=onefile receipt.py

Sous Windows, le résultat attendu est receipt.exe. Utilisez --mode=standalone si vous préférez un dossier de distribution. Indiquez explicitement l'un de ces modes : le mode accéléré, utilisé par défaut par Nuitka, n'est pas fait pour distribuer une application sur une machine sans Python. Suivez le manuel officiel pour configurer le compilateur et pour les options propres à certains packages.

Méthode 4 : créer un dossier d'application avec cx_Freeze

cx_Freeze (opens in a new tab) produit normalement un dossier qui contient l'exécutable et les bibliothèques dont il dépend. Choisissez-le si vous voulez maintenir un build d'application configuré et distribuer le dossier entier.

Dans le même type d'environnement virtuel, installez le package et lancez son outil de build en ligne de commande :

py -m venv .venv
.\.venv\Scripts\python.exe -m pip install cx-Freeze
.\.venv\Scripts\cxfreeze.exe --script receipt.py --target-dir dist

Ces commandes suivent la référence actuelle de la commande cxfreeze (opens in a new tab). Distribuez le dossier dist complet, bibliothèques comprises, au lieu de copier uniquement l'EXE. Pour des réglages de projet reproductibles, cx_Freeze prend aussi en charge pyproject.toml et un script setup en Python.

Vérifier le résultat avant de le partager

Lancez l'application sur une machine Windows représentative de la configuration de vos destinataires. Pour cet exemple, vérifiez le prix des articles, le total de $40.00 et l'invite qui demande d'appuyer sur Entrée. Une machine sans installation séparée de Python permet de confirmer que vous avez bien inclus le runtime et les dépendances.

Pour une application plus importante, testez l'action dont vos destinataires ont réellement besoin, par exemple sélectionner un fichier d'entrée et enregistrer un rapport. Si une fenêtre de console se ferme aussitôt, lancez l'EXE depuis PowerShell pour lire l'erreur. S'il manque une image ou un modèle, vérifiez à la fois les fichiers packagés et le chemin utilisé pour les charger. Les imports dynamiques peuvent devoir être inclus explicitement avec les options de l'outil de packaging local.

Les EXE non signés, quel que soit l'outil qui les a produits, peuvent déclencher un avertissement Microsoft Defender SmartScreen la première fois qu'on les ouvre. Le destinataire sélectionne alors More info, puis Run anyway (sur un Windows en français : « Informations complémentaires » puis « Exécuter quand même »).

Questions fréquentes

Comment convertir un fichier .py en .exe sans installer d'outil de packaging ?

Utilisez le convertisseur Python vers EXE de Runcell (opens in a new tab). Choisissez votre fichier Python, votre dossier ou votre ZIP, sélectionnez le script d'entrée, vérifiez les dépendances et générez l'EXE Windows dans votre navigateur.

Un navigateur peut-il vraiment générer un exécutable Windows ?

Oui. Runcell assemble des composants Windows précompilés, un runtime Python et votre application en un EXE, directement dans le navigateur. Vous téléchargez ce fichier et le lancez sous Windows. Le navigateur n'a pas besoin d'exécuter l'application Windows pour générer son binaire.

La personne qui lance l'EXE doit-elle avoir Python installé ?

Aucune installation séparée de Python n'est nécessaire si vous distribuez l'application avec son runtime et les dépendances requises. Runcell inclut le runtime dans son processus de packaging. Pour un build en dossier réalisé avec un outil local, partagez le dossier de sortie complet.

Quelle est la commande PyInstaller pour obtenir un seul EXE ?

Lancez python -m PyInstaller --onefile receipt.py dans l'environnement Windows où PyInstaller et les dépendances de votre projet sont installés. Dans l'exemple, le résultat est dist\receipt.exe.

Sources et tests

Le workflow et le mécanisme de packaging de Runcell décrits ici suivent son guide produit public (opens in a new tab), consulté le 4 novembre 2026. Les commandes de build locales suivent la documentation officielle liée dans chaque méthode. Nous avons exécuté l'exemple de reçu sous macOS, l'avons sélectionné dans le convertisseur Runcell en ligne, avons généré et téléchargé receipt.exe, puis inspecté son en-tête PE Windows x64. Toujours sous macOS, nous avons fait le build du script de reçu avec PyInstaller 6.22.3 (--onefile) et cx_Freeze 8.7.4 pour vérifier ces commandes, et contrôlé les options de mode de Nuitka à partir de sa sortie d'aide. Aucun EXE n'a été lancé sous Windows pour cet article.

Guides associés