EXE erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nikh22
User
Beiträge: 28
Registriert: Montag 27. Juni 2022, 15:46

Hallo liebe Leute,

ich habe ein für mich wirklich umfangreiches Programm geschrieben, mit einer GUI mit tkinter.
Die Struktur, also das Projektverzeichnis, sieht wie folgt aus:
gui.py (Frontend)
functions_frontend.py
main.py (Backend)
functions_backend.py
[folder]: pictures_tools
[folder:] pictures_exporter

In meiner GUI werden Daten eingegeben und Pfade ausgewählt die an die main.py weitergegeben werden und durch drücken eines Start-Knopfes in der GUI wird die main.py gestartet. Die main.py wiederum braucht die Ordner pictures_tools und pictures_exporter.
Die gui.py implementiert mehrere Funktionen aus functions_frontend.py und die main.py aus functions_backend.py.

Wie kann ich nun daraus eine exe-datei machen?
Wenn möglich würde ich gerne das festgelegte Icon behalten. Wäre aber nur nice to have.

Die Befehle:
pyinstaller --onefile main.py
sowie
pyinstaller --onefile gui.py
funktionieren leider beide nicht, obwohl ich alles in einem Projektverzeichnis habe.

Kann mir jemand sagen wie ich das Problem löse?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was heisst funkionieren nicht? Denn grundsaetzlich ist das schon das richtige Vorgehen, pyinstaller zu benutzen.
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Hat nichts mit der EXE zu tun, aber die Struktur ist komisch. Beim Namen `main` würde man erwarten das *das* der Einstiegspunkt ist.

`functions_*` hat in den Namen nichts zu suchen. Wenn da dann mal eine Klasse dazu kommen sollte, stimmt der Modulname plötzlich nicht mehr, obwohl sich an der Bedeutung der Module im Grunde nichts geändert hat. Funktionen sind ja auch kein Aufteilungskriterium. Module fassen Funktionen *und* Klassen zusammen, die zusammengehören. Man teilt nicht in Module mit Klassen und Module mit Funktionen auf. Das ist als wenn man Bücher nach der Farbe oder der Grösse, oder ob Hardcover oder Softcover ordnen würde, statt sinnvoll thematisch nach Inhalt.

Dann noch etwas das vielleicht tatsächlich mit der EXE zu tun hat: Was heisst denn „… wird die main.py gestartet“? Das *sollte* heissen, das dieses Modul importiert wurde und dann dort eine Funktion aufgerufen wird. Das sollte nicht heissen, dass da versucht wird mit `subprocess` oder etwas ähnlichem tatsächlich ein neues Programm zu starten.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
DeaD_EyE
User
Beiträge: 1240
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

funktionieren leider beide nicht, obwohl ich alles in einem Projektverzeichnis habe.
Mein Auto springt nicht an. Es ist schwarz. Woran liegt das?
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
nikh22
User
Beiträge: 28
Registriert: Montag 27. Juni 2022, 15:46

Ist ja gut habe verstanden, dass nicht funktionieren nicht wirklich hilfreich ist. Wenn ich die .exe starte egal welchen der beiden gezeigten pyinstaller Befehle ich verwende, öffnet sich ein schwarzes Fenster was sich kurz darauf wieder schließt.
Sollte ich die ganzen Funktionen jeweils in die eigene Datei inkludieren? Das sind jeweils bestimmt 10 Funktionen.
Die main.py wird über subprocess.popen([python_interpreter, 'main.py', path_var.()]) geöffnet.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Nein, das heißt nicht, dass Du alles in eine Datei packst, sondern nur, dass Du Deinen Modulen bessere Namen geben solltest, also was die 10 Funktionen denn gemeinsam haben.

Genauso solltest Du die Funktionalität in >main.py< als Funktion verfügbar machen, die Du einfach in der GUI.py importieren kannst und direkt aufrufen, statt über subprocess zu gehen.

Python-Programme startet man in der "Eingabeaufforderung" so dass man auch die Fehlermeldung sehen kann. Wenn Du das machst, was kommt für eine Meldung?
nikh22
User
Beiträge: 28
Registriert: Montag 27. Juni 2022, 15:46

Vielen Dank für den Tipp mit der Eingabeaufforderung.
Dadurch habe ich herausgefunden, dass das Icon für die Anwendung nicht gelesen werden konnte.
Nun habe ich den entsprechenden Befehl angepasst und alles funktioniert problemlos.
Befehl : pyinstaller --onefile --icon='symbol.ico' gui.py
(für jemandem mit einem ähnlichen, die Datei liegt im root-Verzeichnis, ansonsten relativen oder absoluten Pfad angeben)
Die >main.py> funktioniert jetzt auch als Funktion ohne subprocess zu nutzen.

Vielen Dank für eure Antworten.
Antworten