Aller au contenu

Un installateur Windows pour une app Python (PyInstaller, Setup.exe)

Figez un programme Python avec PyInstaller, puis emballez le résultat dans un véritable installateur Windows avec raccourcis et désinstalleur. Pourquoi onedir vaut mieux que onefile pour les installateurs, et les réglages qui comptent.

Mis à jour le 31 octobre 2026 · 3 min de lecture

PyInstaller transforme un programme Python en .exe Windows qui s'exécute sans Python installé. Ce qu'il ne fait pas, c'est installer ce programme : pas d'entrée dans le menu Démarrer, pas de désinstalleur, rien dans les Paramètres Windows. Pour cela, on emballe la sortie de PyInstaller dans un installateur. Voici le parcours complet, du script au Setup.exe.

Étape 1 : figer l'application avec PyInstaller

Installez PyInstaller dans l'environnement du projet, puis lancez la compilation depuis le dossier qui contient votre script d'entrée :

pip install pyinstaller
pyinstaller --noconsole --onedir --name MyApp --icon app.ico main.py

Ce que font les options :

  • --onedir (la valeur par défaut) produit un dossier dist/MyApp/ contenant MyApp.exe et un dossier _internal/ de bibliothèques. Utilisez ce mode pour les installateurs. Il démarre plus vite que --onefile, puisque rien n'a besoin d'être décompressé dans un dossier temporaire à chaque lancement, et il attire moins l'attention des heuristiques antivirus.
  • --noconsole masque la fenêtre de console noire pour les applications graphiques (Tkinter, PyQt, Kivy, etc.). Omettez-la pour les outils en ligne de commande.
  • --icon app.ico intègre l'icône dans le .exe. Gardez le même .ico pour l'installateur.
  • --name MyApp nomme l'exécutable et le dossier de sortie.

Les fichiers de données que votre programme ouvre à l'exécution (images, gabarits de configuration, modèles) doivent être ajoutés avec --add-data "src;dest" ou dans le fichier .spec, sans quoi ils ne se retrouveront pas dans dist/MyApp/.

Ouvrez dist/MyApp/MyApp.exe et vérifiez que l'application fonctionne. Si vous le pouvez, copiez tout le dossier dist/MyApp sur un autre PC Windows sans Python et lancez-le là aussi.

Étape 2 : compresser le dossier de sortie

Compressez le contenu de dist/MyApp/ en .zip : MyApp.exe et _internal/. N'incluez ni build/, ni le fichier .spec, ni votre arborescence source. Le zip est ce qui sera installé, octet pour octet.

Étape 3 : construire l'installateur

  1. Envoyez le zip sur ExeTup. Il détecte MyApp.exe comme programme principal.
  2. Saisissez le nom de l'application, la version, l'éditeur et, si vous le souhaitez, une licence.
  3. Choisissez tous les utilisateurs (Program Files, invite administrateur) ou utilisateur actuel (aucun droit administrateur requis). Les outils distribués à des collègues fonctionnent souvent mieux par utilisateur.
  4. Choisissez l'architecture. PyInstaller compile pour le Python avec lequel vous l'avez lancé : un Python 64 bits donne une application 64 bits.
  5. Envoyez app.ico, activez les raccourcis souhaités, puis lancez la construction.
  6. Téléchargez Setup.exe et testez-le sous Windows.

Notes propres à Python

  • Faux positifs des antivirus. Les paquets PyInstaller sont une cible fréquente des heuristiques antivirus trop prudentes, surtout les builds --onefile. Un build onedir dans un installateur classique, placé dans Program Files, se comporte comme n'importe quel autre programme et a moins de chances d'être signalé. La signature de code aide encore davantage.
  • Taille. Une application Tkinter pèse 20 à 40 Mo ; PyQt, NumPy ou PyTorch font grimper ce chiffre bien plus haut. La compression LZMA de l'installateur le divise généralement par deux. Excluez les modules que vous n'utilisez pas avec --exclude-module pour rester léger.
  • Premier lancement. Comme onedir n'a rien à décompresser, le premier démarrage est aussi rapide que les suivants.
  • Mises à jour. Livrez un nouvel installateur avec un numéro de version plus élevé. L'installation par-dessus la version précédente remplace les fichiers sur place.
  • Outils en console. Pour un programme en ligne de commande, envisagez une installation par machine et indiquez le dossier d'installation aux utilisateurs ; l'installateur ne l'ajoute pas au PATH.

Alternatives

Nuitka et cx_Freeze produisent eux aussi un dossier avec un .exe ; l'étape d'installation est identique. Si vous préférez écrire vous-même le script d'installation, NSIS et Inno Setup fonctionnent tous deux avec la sortie de PyInstaller.

Questions fréquentes

Faut-il utiliser --onefile ou --onedir pour un installateur ?

--onedir. L'installateur fournit déjà aux utilisateurs un seul Setup.exe à télécharger, il n'y a donc aucune raison de subir le démarrage lent et la décompression en dossier temporaire de onefile. Onedir est d'ailleurs le mode par défaut de PyInstaller.

Les utilisateurs ont-ils besoin d'installer Python ?

Non. PyInstaller regroupe l'interpréteur Python et les bibliothèques dans le dossier, et l'installateur place ce dossier sur la machine de l'utilisateur.

Pourquoi Windows affiche-t-il un avertissement pour mon installateur ?

Les téléchargements récents et non signés déclenchent Microsoft SmartScreen tant qu'ils n'ont pas acquis de réputation. Consultez le guide SmartScreen pour savoir ce que vous pouvez faire.

Puis-je inclure un exemple de configuration ou un dossier de données ?

Oui. Soit vous l'ajoutez avec l'option --add-data de PyInstaller, pour qu'il atterrisse dans _internal/, soit vous l'ajoutez à l'étape « Autres fichiers » d'ExeTup pour le placer à côté de MyApp.exe.

Guides associés