Im Bereich der Programmierung ist das Verständnis des Ausführungskontexts einer Anwendung von entscheidender Bedeutung. Besonders wenn es um gebündelte Anwendungen geht, wie sie beispielsweise mit pyInstaller erstellt wurden. Eine häufige Herausforderung entsteht, wenn eine Anwendung Zugriff auf eine daneben liegende Konfigurationsdatei benötigt. In diesem Artikel untersuchen wir eine Technik zur Lösung dieses Problems durch genaues Abrufen des Pfads der Anwendung in einer von pyInstaller generierten EXE-Datei.
Wenn Sie die herkömmliche Methode verwenden, um den Pfad zu einer Datei neben der Anwendung zu erstellen, wie im folgenden Codeausschnitt dargestellt:
import os config_name = 'myapp.cfg' config_path = os.path.join(sys.path[0], config_name)
Im Kontext einer pyInstaller-EXE-Datei stößt man auf ein Dilemma. Die Liste sys.path, die normalerweise das Verzeichnis mit der Anwendung enthält, ist leer. Um dieses Problem anzugehen, verwenden wir einen robusteren Ansatz, der zwischen Skripten und eingefrorenen ausführbaren Dateien unterscheidet.
import os import sys config_name = 'myapp.cfg' # Distinguish script file from frozen exe if getattr(sys, 'frozen', False): application_path = os.path.dirname(sys.executable) elif __file__: application_path = os.path.dirname(__file__) config_path = os.path.join(application_path, config_name)
In diesem Code überprüfen wir das „frozen“-Attribut des „sys“-Moduls. Wenn dies wahr ist, gehen wir davon aus, dass die Anwendung als eingefrorene ausführbare Datei ausgeführt wird, und leiten ihren Pfad von „sys.executable“ ab. Wenn umgekehrt Datei vorhanden ist, schließen wir daraus, dass die Anwendung im Skriptmodus ausgeführt wird und ihr Pfad von __file__ abgeleitet ist.
Die Verwendung dieser Methode garantiert den erfolgreichen Abruf des Anwendungspfads und ermöglicht so Zugriff auf relative Dateien wie die wichtige Konfigurationsdatei.
Das obige ist der detaillierte Inhalt vonWie rufe ich den Anwendungspfad in einer von pyInstaller generierten EXE-Datei ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!