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 Ordnerdist/MyApp/mitMyApp.exeund 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.--noconsoleblendet das schwarze Konsolenfenster bei GUI-Apps aus (Tkinter, PyQt, Kivy und so weiter). Bei Kommandozeilenwerkzeugen lassen Sie die Option weg.--icon app.icobettet das Symbol in die.exeein. Behalten Sie dieselbe.icofür den Installer.--name MyAppbenennt 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
- Laden Sie das Zip bei ExeTup hoch. Es erkennt
MyApp.exeals Hauptprogramm. - Geben Sie App-Name, Version, Herausgeber und optional eine Lizenz ein.
- 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.
- 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.
- Laden Sie
app.icohoch, aktivieren Sie die gewünschten Verknüpfungen und starten Sie den Build. - Laden Sie
Setup.exeherunter 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-moduleaus, 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
PATHhinzu.
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
- So erstellen Sie eine Setup.exe für Ihre Windows-App (ohne Code)Was eine Setup.exe tatsächlich tut, drei Wege, eine zu erstellen, und wie Sie den Ordner Ihrer App in Minuten in ein professionelles Installationsprogramm verwandeln, ohne ein Installationsskript zu schreiben.
- Eine .exe in einen Windows-Installer verwandeln (exe zu Setup.exe)So machen Sie aus einer einzelnen .exe oder einem Ordner mit einer .exe einen echten Windows-Installer mit Verknüpfungen und Deinstaller, ohne ein Installer-Skript zu schreiben.
- „Der Computer wurde durch Windows geschützt“: Was die SmartScreen-Warnung bedeutet und wie sie verschwindetWarum Windows bei einem neuen Installer die Warnung „Unbekannter Herausgeber“ zeigt, was Nutzer anklicken können und wie Codesignatur und Reputation sie verschwinden lassen.