Python-Installer erstellen (Professionelle Qualität)
Sie sind ein Experte für die kommerzielle Bereitstellung von Python-Anwendungen unter Windows. Ihr Ziel ist der kleinste, schnellststartende, sauberste Windows-Installer. Der Kernansatz ist "Nuitka-Ordner-Modus (dist) + Inno Setup-Verpackung" – keine Einzeldatei-Builds, kein störendes Konsolenfenster.
Wann aktivieren
Aktivieren Sie diese Fertigkeit, wenn der Benutzer explizit nach fortgeschrittener Python-Paketierung oder Größen-/Startgeschwindigkeits-Optimierung unter Windows fragt:
- Nuitka-Extrem-/Professionelle Kompilierung, kleinste Größe oder schnellster Start
dist-Ordner-Verschlankung, DLL-Fußabdruck-Analyse, 32-Bit vs. 64-Bit Größenabwägungen- Inno Setup-Verpackung mit vollständigen Metadaten und sauberer, rückstandsfreier Deinstallation
Diese Fertigkeit zielt auf fortgeschrittene Größen-/Startoptimierung – nicht auf die einfache Umwandlung von Skript in EXE.
Wie es funktioniert
- Build-Parameter bestätigen – App-Name, Version, Herausgeber, EXE-Name, Quell-/Ausgabeverzeichnisse, Symbol. Niemals automatisch ausfüllen; den Benutzer fragen.
- Quell-Build überprüfen – Konsole deaktiviert, LTO aktiviert, VC++-Laufzeit vorhanden.
- Mit Nuitka kompilieren unter Verwendung der Modul-Ausschluss- und Plugin-Strategie unten.
- Den
dist-Ordner verschlanken – Debug-Symbole, Caches, Tests und Dokumentation entfernen, mit Schutz für laufzeitnotwendige Metadaten. - DLLs analysieren, um die größten Abhängigkeiten zu finden und zu trimmen.
- Mit Inno Setup verpacken – LZMA2-Ultra-Kompression, vollständige Metadaten, rückstandsfreie Deinstallation und eine architekturgleiche VC++-Redistributable.
Beispiele
- "用 Nuitka 把这个 PySide2 项目打成最小体积的商业安装包" → führen Sie den vollständigen Workflow aus: 32-Bit empfehlen, WebEngine/3D/Charts ausschließen,
distverschlanken, mit Inno Setup verpacken. - "我的 exe 有 400 MB,怎么瘦身到一半" → DLLs analysieren, auf
opencv-python-headlessumsteigen,opengl32swentfernen,dist-Verschlankung anwenden. - "安装后在纯净系统打不开" → sicherstellen, dass die passende VC++-Redistributable im Inno Setup-Skript enthalten ist.
Kernprinzip
Halten Sie am "Nuitka-Ordner-Modus (dist) + Inno Setup-Verpackung"-Ansatz fest. Vermeiden Sie Einzeldatei-Versionen. Vermeiden Sie schwarze Konsolenfenster.
Praxis-Referenzfall (Produktionsreife PySide2-Desktop-Anwendung, 323 MB, mit OpenCV / Playwright)
Projektübersicht
- Gesamtgröße: 323 MB
- Packtool: PyInstaller 4.7 (32-Bit)
- Hauptabhängigkeiten: PySide2 (22,52 MB), OpenCV (62,38 MB), Playwright (76,74 MB)
- Python-Version: Python 3.8 (32-Bit)
- Anzahl DLLs: 71, insgesamt 93,23 MB
Wichtige Optimierungsstrategien
- BESTANDEN: 32-Bit Python verwenden → Volumenreduktion um 20-30%
- BESTANDEN: base_library.zip Standardbibliothek komprimieren → 0,74 MB
- BESTANDEN: Module gezielt ausschließen → kein pytest/unittest/setuptools
- BESTANDEN: Qt-Plugins reduzieren → nur notwendige Plugins behalten
Volumenverteilung
| Komponente | Volumen | Anteil | Optimierungsvorschlag |
|---|---|---|---|
| playwright | 76,74 MB | 23,8% | Kann bei Bedarf entfernt werden |
| OpenCV | 62,38 MB | 19,3% | opencv-python-headless verwenden |
| PySide2 | 22,52 MB | 7,0% | WebEngine/3D/Charts ausschließen |
| Andere Abhängigkeiten | 161,36 MB | 49,9% | - |
Erwartete Ergebnisvergleiche
| Projekttyp | Nuitka Original | Optimiert | Referenzprojekt gemessen |
|---|---|---|---|
| Tkinter + Standardbibliothek | 150-250 MB | 80-120 MB | - |
| PyQt/PySide | 200-400 MB | 120-250 MB | 323 MB (mit OpenCV etc.) |
| Mit numpy/pandas | 300-600 MB | 180-350 MB | - |
Kern-Workflow - WARNUNG: Streng befolgen
Wenn der Benutzer eine Paketierung anfordert, gehen Sie wie folgt vor:
Schritt 1: Parameter-Zwangsbestätigung (FEHLER: Keine Standardwerte verwenden)
WARNUNG: Wichtige Regel: Alle folgenden Parameter müssen einzeln beim Benutzer erfragt werden. Das automatische Ausfüllen oder die Verwendung von Standardwerten ist verboten!
Sie müssen den Benutzer nach den folgenden Informationen fragen und diese bestätigen lassen (warten Sie auf eine eindeutige Antwort, bevor Sie fortfahren):
| Parameter | Beschreibung | Beispiel |
|---|---|---|
| Softwarename (App Name) | Anzeigename der Software | 红墨批注 |
| Version (Version) | Semantische Versionsnummer | 1.0.0 |
| Herausgeber/Firmenname (Publisher) | Im Bedienfeld angezeigter Herausgeber | YourCompany |
| Hauptprogramm (Exe Name) | Name der Haupt-EXE-Datei | RedInk.exe |
| Quellpfad (Source Dir) | Absoluter Pfad zum Nuitka dist-Ordner | D:\project\dist |
| Ausgabepfad (Output Dir) | Speicherort des Installers | D:\project\output |
| Symbolpfad (Icon Path) | Absoluter Pfad zur .ico-Datei (optional, aber empfohlen) | D:\project\icon.ico |
| Website-URL (URL) | Optional, für den Link im Bedienfeld | https://example.com |
Abfragevorlage:
"Bitte geben Sie die folgenden Paketierungsparameter an. Ich benötige Ihre Bestätigung für jeden einzelnen:
- Softwarename:
- Version:
- Herausgeber/Firmenname:
- Hauptprogramm-Dateiname (z.B. xxx.exe):
- Quellpfad (Nuitka dist-Ordner):
- Ausgabepfad (Speicherort des Installers):
- Symbolpfad (.ico-Datei, optional):
- Website-URL (optional):
Bitte füllen Sie jeden Punkt aus oder antworten Sie mit "Überspringen", um einen leeren Wert zu verwenden."
Schritt 2: Quellcode-Qualitäts- und Build-Überprüfung (Kritisch) Bevor Code generiert wird, müssen Sie dem Benutzer die folgenden kritischen Bestätigungen mitteilen (da Inno Setup nur ein Packtool ist und die Laufzeiteigenschaften des Programms nicht ändern kann):
"WARNUNG: Build-Parameter-Prüfung:
- Kein Konsolenfenster: Bitte bestätigen Sie, dass Ihr dist-Ordner mit
nuitka --windows-console-mode=disablekompiliert wurde (sonst erscheint nach der Installation ein schwarzes Fenster).- Hohe Leistung: Bitte bestätigen Sie, dass
--lto=yesverwendet wurde (sonst ist die Startgeschwindigkeit möglicherweise nicht optimal).- Laufzeitbibliothek: Bitte stellen Sie sicher, dass der dist-Ordner die notwendigen VC++-Laufzeitbibliotheken enthält, damit die Anwendung auch auf einem reinen System läuft.
Bestätigen Sie, dass die Quelldateien bereit sind, mit 'Bestätigt', oder kompilieren Sie sie bitte zuerst neu."
Schritt 3: Code generieren Nach der Bestätigung des Benutzers geben Sie den Code mit vollständigen Metadaten und Deinstallationssymbol-Reparatur aus.
Nuitka Extrem-Optimierungskompilierung (basierend auf Referenzprojekt-Erfahrung)
I. 32-Bit vs. 64-Bit Auswahlstrategie
Grund für die Verwendung von 32-Bit Python im Referenzprojekt:
| Komponente | 64-Bit Volumen | 32-Bit Volumen | Einsparung |
|---|---|---|---|
| python3x.dll | ~4,5 MB | ~3,8 MB | 15% |
| Qt5Core.dll | ~8 MB | ~5 MB | 37% |
| numpy | ~30 MB | ~20 MB | 33% |
| Gesamt | Basislinie | -20~30% | - |
Empfohlene Bedingungen für 32-Bit:
- BESTANDEN: Speicherverbrauch des Programms < 2 GB
- BESTANDEN: Keine Verarbeitung sehr großer Dateien (< 2 GB)
- BESTANDEN: Zielbenutzer sind normale Bürocomputer
32-Bit Kompilierungsmethode:
# 1. 32-Bit Python installieren (kann neben 64-Bit existieren)
# Download: https://www.python.org/downloads/windows/
# 2. Abhängigkeiten mit 32-Bit Python installieren
py -3.12-32 -m pip install -r requirements.txt
# 3. Mit 32-Bit Python kompilieren
py -3.12-32 -m nuitka --standalone ...deine-parameter
II. Modul-Ausschlussliste (vom Referenzprojekt verifiziert)
Sichere Ausschlussliste (wird zur Laufzeit nicht benötigt):
unittest,test,pytest,_pytest,doctest,pdb,pdbpp,
setuptools,pip,distutils,pkg_resources,
email.mime,http.server,xmlrpc,pydoc
Erwarteter Effekt: 30-50 MB Einsparung
III. GUI-Framework-spezifische Optimierungen
Tkinder Extrem-Optimierung (Empfohlen, am leichtesten)
nuitka --standalone --windows-console-mode=disable ^
--lto=yes ^
--jobs=8 ^
--enable-plugin=tk-inter ^
--enable-plugin=anti-bloat ^
--noinclude-pytest-mode=nofollow ^
--noinclude-setuptools-mode=nofollow ^
--nofollow-import-to=unittest,test,pytest,_pytest,doctest,pdb,pdbpp ^
--nofollow-import-to=setuptools,pip,distutils,pkg_resources ^
--nofollow-import-to=email.mime,http.server,xmlrpc,pydoc ^
--python-flag=no_docstrings ^
--output-dir=dist ^
--windows-icon-from-ico=icon.ico ^
--remove-output ^
main.py
Erwartetes Volumen: 80-120 MB (optimiert)
PyQt5 / PySide2 Optimierung
nuitka --standalone --windows-console-mode=disable ^
--lto=yes ^
--jobs=8 ^
--enable-plugin=pyqt5 ^
--enable-plugin=anti-bloat ^
--noinclude-pytest-mode=nofollow ^
--noinclude-setuptools-mode=nofollow ^
--nofollow-import-to=unittest,test,pytest,_pytest,doctest,pdb ^
--nofollow-import-to=setuptools,pip,distutils,pkg_resources ^
--nofollow-import-to=PyQt5.QtWebEngine,PyQt5.QtWebEngineWidgets ^
--nofollow-import-to=PyQt5.Qt3D,PyQt5.QtCharts ^
--python-flag=no_docstrings ^
--include-qt-plugins=sensible,styles,platforms ^
--output-dir=dist ^
--windows-icon-from-ico=icon.ico ^
--remove-output ^
main.py
Erwartetes Volumen: 120-250 MB (optimiert)
IV. One-Click-Kompilierungs-Skriptvorlage
Speichern als build_optimized.bat (im Projektstammverzeichnis):
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
echo ========================================
echo Nuitka Extrem-Optimierungskompilierung (Referenzprojekt)
echo ========================================
REM === Konfigurationsbereich (An Ihre Werte anpassen) ===
set APP_NAME=IhrSoftwarename
set MAIN_FILE=main.py
set ICON_FILE=icon.ico
REM === Automatische CPU-Kern-Erkennung ===
REM Verwendet die Windows-Umgebungsvariable (wmic wurde in Win11 22H2+ entfernt; wenn nicht erkannt, wird --jobs=0 verwendet -> Single-Thread)
set CPU_CORES=%NUMBER_OF_PROCESSORS%
if not defined CPU_CORES set CPU_CORES=4
set /a BUILD_JOBS=%CPU_CORES%
REM === Modul-Ausschlussliste des Referenzprojekts ===
set EXCLUDE_MODULES=unittest,test,pytest,_pytest,doctest,pdb,pdbpp
set EXCLUDE_MODULES=%EXCLUDE_MODULES%,setuptools,pip,distutils,pkg_resources
set EXCLUDE_MODULES=%EXCLUDE_MODULES%,email.mime,http.server,xmlrpc,pydoc
echo.
echo [1/4] Alte Builds bereinigen...
if exist dist rd /s /q dist
if exist build rd /s /q build
echo.
echo [2/4] Nuitka-Kompilierung läuft (Optimierungsstrategien des Referenzprojekts)...
echo - CPU-Kerne: %CPU_CORES% (verwendet %BUILD_JOBS% Threads)
echo - Modulausschlüsse: %EXCLUDE_MODULES%
echo.
nuitka --standalone ^
--windows-console-mode=disable ^
--lto=yes ^
--jobs=%BUILD_JOBS% ^
--enable-plugin=anti-bloat ^
--enable-plugin=tk-inter ^
--noinclude-pytest-mode=nofollow ^
--noinclude-setuptools-mode=nofollow ^
--nofollow-import-to=%EXCLUDE_MODULES% ^
--python-flag=no_docstrings ^
--output-dir=dist ^
--windows-icon-from-ico=%ICON_FILE% ^
--remove-output ^
%MAIN_FILE%
if %errorlevel% neq 0 (
echo.
echo [FEHLER] Kompilierung fehlgeschlagen!
pause
exit /b 1
)
echo.
echo [3/4] Kompilierungsergebnis erfassen...
for /f %%a in ('powershell -NoProfile -Command "(Get-ChildItem -LiteralPath 'dist\%APP_NAME%.dist' -Recurse -File | Measure-Object -Property Length -Sum).Sum"') do set TOTAL_SIZE=%%a
set TOTAL_SIZE=%TOTAL_SIZE:,=%
set /a SIZE_MB=%TOTAL_SIZE% / 1048576
echo - Volumen nach Kompilierung: %SIZE_MB% MB
echo.
echo [4/4] Schlankheitsbereinigung durchführen (Strategie des Referenzprojekts)...
powershell -ExecutionPolicy Bypass -File slim_dist.ps1 -DistPath "dist\%APP_NAME%.dist"
echo.
echo ========================================
echo Kompilierung abgeschlossen!
echo ========================================
pause
V. dist-Schlankheitsskript (Bereinigung auf Referenzprojekt-Niveau)
Speichern als slim_dist.ps1 (im selben Verzeichnis wie build_optimized.bat):
param(
[string]$DistPath
)
$ErrorActionPreference = "Continue" # Fehler nicht stillschweigend ignorieren: Löschfehler werden angezeigt, um falsche Erfolge zu vermeiden
Write-Host "`n========================================