exe startet zu langsam

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
steenhy
User
Beiträge: 19
Registriert: Montag 23. März 2020, 20:22

Hi,
ich bekomme bestimmt gleich Ärger, da das Thema hier nicht hingehört...

Ich habe mittlerweile meine erste Anwendung fertig.
Ich habe meist mit PyQt5 aber auch mit Tkinker gearbeitet.
Es wurden etwa 1900 Zeilen Code.
Das ganze habe ich mit pyinstaller in eine exe Datei zusammengefügt (46 MB).
Wenn diese dann auf einem Windows PC gestartet wird, dauert es mindestens 15 Sekunden bis die Anwendung geladen worden ist.
Dies ist mir zu lang und für Anwender nicht zumutbar.
Gibt es da andere Möglichkeiten?

Ich habe bislang mit Thonny als IDE gearbeitet. Was wäre der nächste Schritt?
Was haltet ihr von Visual Studio? Da kann man doch auch mit Phyton arbeiten.
Kann man hier exe - Dateien erstellen die schneller starten?

Danke für alle Antworten...
Benutzeravatar
__blackjack__
User
Beiträge: 13533
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@steenhy: Es ist völlig wurscht mit welcher IDE Du den Quelltext schreibst. Dadurch wird ein davon völlig unabhängiges Programm nicht auf magische Weise schneller.

Du musst halt schauen wo die ganze Zeit bleibt.

Code: Alles auswählen

- (void)countSheep {
    unsigned int sheep = 0;
    while ( ! [self isAsleep]) { ++sheep; }
}
nezzcarth
User
Beiträge: 1686
Registriert: Samstag 16. April 2011, 12:47

Als erstes könntest du mal testen, wie lange das Programm braucht, wenn du es regulär, direkt mit dem Python Interpreter ausführst. Dann weißt du schon mal, welche Verzögerung durch den Overhead, den PyInstaller einführt, entsteht. Anschließend kannst du in deinem Programm nach Bottlenecks auf die Suche gehen.
steenhy
User
Beiträge: 19
Registriert: Montag 23. März 2020, 20:22

Hi,
danke für die Infos,
das Problem sind nicht die Prozesse in der Anwendung, sondern das Laden der Python Umgebung.
Beim Start der exe-Datei werden erst die Python-Dateien in einem temporären Verzeichnis entpackt, das ist die Zeit die nervt.
Die Anzeige der ersten Maske der Anwendung dauert nur Millisekunden.
Meine Fragen sind:
Wie erstellt ihr exe Dateien?
Wie lange brauchen die unter Windows zum Laden?
Hat jemand Erfahrung mit vs-Python?

Gruß
Benutzeravatar
sparrow
User
Beiträge: 4361
Registriert: Freitag 17. April 2009, 10:28

Wie du richtig schreibst, ist eine .exe-Datei, die mit Pyinstaller erzeugt wird, ein Archiv, dass sich beim Starten entpackt und das mitgeführte Python mit deinem Script startet.
Wie bereits hier geschrieben, hat das gar nichts mit der eingsetzen IDE zu tun und lässt sich auch nur beschleunigen, indem du dafür sorgst, dass auf dem Zielsystem der Datendurchsatz schneller wird.

Komplett umgehen lässt sich das Problem ganz einfach: Du lieferst keine .exe-Datei aus sondern dein Python-Script, das von dem bereits installierten Python ausgeführt wird.

Oder du versuchst keine one-file-exe daraus zu machen - dann muss nichts entpackt werden.
Karsten Böhme
User
Beiträge: 86
Registriert: Sonntag 23. Dezember 2012, 07:54

Ich hatte das gleiche Problem,

gerade wenn Du mit Qt arbeitest werden Unmengen Bibliotheken in die exe eingebunden und bevor Du etwas zu sehen bekommst muss der ganze Spaß entpackt werden. Nutze unbedingt die PyInstaller-Option --onedir.
Da liegt alles ungepackt vor und Du siehst Dein erste Fenster nach wenigen Sekunden und Du kannst den gesamten Ordner trotzdem via Copy and Paste auf andere Systeme kopieren.
steenhy
User
Beiträge: 19
Registriert: Montag 23. März 2020, 20:22

Danke für den Tipp.
Es hat gleich geklappt.
Die Anwendung startet nullkommanix...
Jetzt muss ich mich nur mal mit den Verzeichnissen befassen.
Es ist ein ganz schöner Salat von Dateien...

VG
Benutzeravatar
__blackjack__
User
Beiträge: 13533
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@steenhy: Da kann man sich ja einen Installer für basteln, dann sehen die Anwender davon nix wenn sie nicht aktiv hinschauen.

Code: Alles auswählen

- (void)countSheep {
    unsigned int sheep = 0;
    while ( ! [self isAsleep]) { ++sheep; }
}
Antworten