pyinstaller Ergebnis-Dateien des Programms werden nicht am richtigen Ort gespeichert.

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
Xelared
User
Beiträge: 2
Registriert: Dienstag 10. Oktober 2023, 14:00

Hallo,

ich arbeite mit Python 3.10 unter W11(64 bit) und habe ein Script welches, wenn von der Kommandozeile aus aufgerufen, fehlerfrei funktioniert.
Das Script ruft je ein Modul für Benutzereingaben und Ergebnisdarstellung auf.
Funktionsweise:
Das Script liest aus der Zwischenablage Daten, analysiert diese und schreibt die Ergebnisse formatiert in eine txt-Datei, die ich mittels gui (tkinker) anzeigen lasse. Die Ergebnisdatei, sowie weitere temporäre Dateien werden im Verzeichnis des Scripts gespeichert. Im Script habe ich nur absolute Pfadnamen verwendet und das Verzeichnis des Scripts mit
os.path.dirname(os.path.realpath(__file__))
ermittelt.
Ich habe das Script mit pyinstaller in eine exe-Datei kompiliert und diese funktioniert wie erwartet, nur dass die Ergebnisdatei nicht im Verzeichnis der exe-Datei gespeichert wird, sondern bei
  • pyinstaller mit der Option -onedir in einem Unterverzeichnis _internal
  • pyinstaller mit der Option -onefile in einem Unterverzeichnis in user\appdata\local\temp\
Ich habe versucht, mit Optionen in pyinstaller das gewünschte Ergebnis zu erzielen, leider ohne Erfolg.
Vielleicht gibt es hier im Forum Lösungsansätze.

Vielen Dank fürs Lesen,
Xelared
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das baut man sich mit https://pyinstaller.org/en/stable/runti ... ation.html# - wenn man gebuendelt laeuft, dann nimmt man sys.argv[0]'s Verzeichnis. Ggf auch sys.executable, aber das ist beschraenkter.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Da hören sich so einige Sachen falsch an. Wenn Dateien nur geschrieben werden um sie gleich danach in einer GUI anzuzeigen, dann sollten sie überhaupt nicht gespeichert werden, sondern einfach als Argument an die entsprechende Funktion übergeben werden. Die GUI kann ja dann auch z.B anbieten das Ergebnis in eine Datei zu schreiben, aber dann gibt der Nutzer den Ort an wo er die Ergebnisse gerne haben möchte.
Zweiter Fehler: man schreibt keine Dateien an denselben Ort wie die beiden Dateien. Das Programm das Programm sollte an sich unveränderlich sein. Wenn man Dateien schreibt dann entweder ins Damp Verzeichnis, falls es sich wirklich um temporäre Dateien handelt die man unbedingt auf Platte schreiben muss, oder aber ins aktuelle Arbeitsverzeichnis des Nutzers, das der ja frei wählen kann.
So oder so besteht das Problem nicht, dass nicht dass richtige Verzeichnis gefunden wird.
Xelared
User
Beiträge: 2
Registriert: Dienstag 10. Oktober 2023, 14:00

Vielen Dank für die Antworten,

durch den Link von __deets__ habe ich einen Eindruck davon bekommen, wie der pyinstaller "tickt". Der Hinweis auf sys.argv[0] war nicht zielführend, aber ich habe mein Problem mit os.getcwd() gelöst.

Die Hinweise von Sirus3 habe ich befolgt indem ich ohne temporäre Dateien arbeite, bzw. diese bei Programmende lösche. Die Menschen, die das Progamm anwenden, sähen sich damit überfordert, einen Speicherort für die Ergebnisdatei einzugeben bzw. auszuwählen. Mein Programm gibt an, wo die Ergebnisdatei gespeichert ist und bietet an, dieses Verzeichnis zu öffnen.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Xelared: Inwiefern hat *das* denn zur Lösung beigetragen‽ Das ist ja das Verzeichnis was genommen wird wenn man *gar nichts macht*, sondern einfach einen Dateinamen verwendet.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten