Zum Inhalt springen

Windows-Installer für eine Python-App (PyInstaller zu Setup.exe)

Frieren Sie ein Python-Programm mit PyInstaller ein und verpacken Sie das Ergebnis in einen richtigen Windows-Installer mit Verknüpfungen und Deinstaller. Warum onedir für Installer besser ist als onefile, und welche Einstellungen zählen.

Aktualisiert am 31. Oktober 2026 · 3 Min. Lesezeit

PyInstaller macht aus einem Python-Programm eine Windows-.exe, die ohne installiertes Python läuft. Was es nicht tut, ist, dieses Programm zu installieren: kein Eintrag im Startmenü, kein Deinstaller, nichts in den Windows-Einstellungen. Dafür verpacken Sie die Ausgabe von PyInstaller in einen Installer. Hier ist der komplette Weg vom Skript zur Setup.exe.

Schritt 1: Die App mit PyInstaller einfrieren

Installieren Sie PyInstaller in der Umgebung des Projekts und bauen Sie dann aus dem Ordner heraus, der Ihr Einstiegsskript enthält:

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

Was die Optionen bewirken:

  • --onedir (die Voreinstellung) erzeugt einen Ordner dist/MyApp/ mit MyApp.exe und einem Ordner _internal/ voller Bibliotheken. Verwenden Sie diese Variante für Installer. Sie startet schneller als --onefile, weil bei jedem Start nichts in einen temporären Ordner entpackt werden muss, und sie zieht weniger Aufmerksamkeit von Antivirus-Heuristiken auf sich.
  • --noconsole blendet das schwarze Konsolenfenster bei GUI-Apps aus (Tkinter, PyQt, Kivy und so weiter). Bei Kommandozeilenwerkzeugen lassen Sie die Option weg.
  • --icon app.ico bettet das Symbol in die .exe ein. Behalten Sie dieselbe .ico für den Installer.
  • --name MyApp benennt die ausführbare Datei und den Ausgabeordner.

Datendateien, die Ihr Programm zur Laufzeit öffnet (Bilder, Konfigurationsvorlagen, Modelle), müssen mit --add-data "src;dest" oder in der .spec-Datei hinzugefügt werden, sonst landen sie nicht in dist/MyApp/.

Öffnen Sie dist/MyApp/MyApp.exe und prüfen Sie, ob die App läuft. Kopieren Sie nach Möglichkeit den gesamten Ordner dist/MyApp auf einen anderen Windows-PC ohne Python und starten Sie sie auch dort.

Schritt 2: Den Ausgabeordner zippen

Zippen Sie den Inhalt von dist/MyApp/: MyApp.exe und _internal/. Nehmen Sie weder build/ noch die .spec-Datei noch Ihren Quellbaum mit auf. Das Zip ist das, was installiert wird, Byte für Byte.

Schritt 3: Den Installer bauen

  1. Laden Sie das Zip bei ExeTup hoch. Es erkennt MyApp.exe als Hauptprogramm.
  2. Geben Sie App-Name, Version, Herausgeber und optional eine Lizenz ein.
  3. Wählen Sie alle Benutzer (Program Files, Administratorabfrage) oder aktueller Benutzer (keine Administratorrechte nötig). Werkzeuge, die an Kollegen verteilt werden, funktionieren oft pro Benutzer am besten.
  4. Wählen Sie die Architektur. PyInstaller baut für das Python, mit dem Sie es ausgeführt haben: Ein 64-Bit-Python ergibt eine 64-Bit-App.
  5. Laden Sie app.ico hoch, aktivieren Sie die gewünschten Verknüpfungen und starten Sie den Build.
  6. Laden Sie Setup.exe herunter und testen Sie sie unter Windows.

Python-spezifische Hinweise

  • Fehlalarme von Antivirenprogrammen. PyInstaller-Pakete sind ein häufiges Ziel übervorsichtiger Antivirus-Heuristiken, vor allem --onefile-Builds. Ein onedir-Build in einem normalen Installer, abgelegt in Program Files, verhält sich wie jedes andere Programm und wird seltener gemeldet. Code-Signierung hilft zusätzlich.
  • Größe. Eine Tkinter-App hat 20 bis 40 MB; PyQt, NumPy oder PyTorch treiben das weit höher. Die LZMA-Kompression des Installers halbiert es in der Regel. Schließen Sie nicht benötigte Module mit --exclude-module aus, um schlank zu bleiben.
  • Erster Start. Da onedir nichts entpacken muss, ist der erste Start so schnell wie alle weiteren.
  • Updates. Liefern Sie einen neuen Installer mit einer höheren Versionsnummer aus. Die Installation über die vorherige Version ersetzt die Dateien an Ort und Stelle.
  • Konsolenwerkzeuge. Erwägen Sie bei einem Kommandozeilenprogramm eine Installation pro Rechner und nennen Sie den Benutzern den Installationsordner; der Installer fügt ihn nicht zum PATH hinzu.

Alternativen

Nuitka und cx_Freeze erzeugen ebenfalls einen Ordner mit einer .exe; der Installer-Schritt ist identisch. Wenn Sie das Installer-Skript selbst schreiben möchten, funktionieren sowohl NSIS als auch Inno Setup mit der Ausgabe von PyInstaller.

Häufige Fragen

Soll ich für einen Installer --onefile oder --onedir verwenden?

--onedir. Der Installer gibt den Benutzern ohnehin eine einzige Setup.exe zum Herunterladen, es gibt also keinen Grund, den langsamen Start und das Entpacken in einen temporären Ordner von onefile in Kauf zu nehmen. Onedir ist außerdem die Voreinstellung von PyInstaller.

Müssen Benutzer Python installiert haben?

Nein. PyInstaller bündelt den Python-Interpreter und die Bibliotheken im Ordner, und der Installer legt diesen Ordner auf dem Rechner des Benutzers ab.

Warum warnt Windows vor meinem Installer?

Neue, unsignierte Downloads lösen Microsoft SmartScreen aus, bis sie sich eine Reputation aufgebaut haben. Was Sie tun können, steht im SmartScreen-Leitfaden.

Kann ich eine Beispielkonfiguration oder einen Datenordner mitliefern?

Ja. Fügen Sie sie entweder mit --add-data von PyInstaller hinzu, sodass sie in _internal/ landet, oder im Schritt „Weitere Dateien“ von ExeTup, um sie neben MyApp.exe abzulegen.

Verwandte Anleitungen