Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Datendateien mit der Option --onefile von PyInstaller erfolgreich bündeln?
Bündelung von Datendateien mit PyInstaller: Beheben von --onefile-Problemen
PyInstaller ist ein leistungsstarkes Tool zum Erstellen eigenständiger ausführbarer Dateien aus Python-Skripten. Beim Bündeln von Datendateien wie Bildern oder Symbolen mit der Option --onefile von PyInstaller können Benutzer auf Probleme stoßen, wenn die referenzierten Dateien nicht gefunden werden.
Verstehen der Funktion --onefile
Die Option --onefile kombiniert alle Programmdateien, Bibliotheken und Daten in einer einzigen ausführbaren Datei. Dies kann für Verteilungs- und Sicherheitszwecke von Vorteil sein, erfordert jedoch Änderungen an der Art und Weise, wie auf Datendateien zugegriffen wird.
Umgang mit Datendateien
Zunächst enthält die Spezifikationsdatei den folgenden Code So geben Sie die Datendateien an:
a.datas += [('images/icon.ico', 'D:\[workspace]\App\src\images\icon.ico', 'DATA'), ('images/loaderani.gif','D:\[workspace]\App\src\images\loaderani.gif','DATA')]
Mit --onefile speichert PyInstaller jedoch keine Datendateien mehr in bestimmten Verzeichnissen. Stattdessen werden sie in die ausführbare Datei selbst eingebettet.
Probleme bei der Dateisuche beheben
Um das Problem zu beheben, bei dem Datendateien von der kompilierten EXE-Datei nicht gefunden werden können, ist dies eine bekannte Problemumgehung Dazu gehörte das Setzen einer Umgebungsvariablen mithilfe des atexit-Moduls, wie von Shish vorgeschlagen. Neuere Versionen von PyInstaller haben diese Funktionalität jedoch entfernt.
Aktualisierte Lösung
Für aktuelle Versionen von PyInstaller liegt die Lösung im Zugriff auf Datendateien über sys._MEIPASS. Der folgende Codeausschnitt demonstriert diesen Ansatz:
def resource_path(relative_path): """ Get absolute path to resource, works for dev and for PyInstaller """ try: # PyInstaller creates a temp folder and stores path in _MEIPASS base_path = sys._MEIPASS except Exception: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path)
Durch Ersetzen der Dateipfade in der Spezifikationsdatei durch Aufrufe von „resource_path()“ können die Datendateien innerhalb der ausführbaren Datei „--onefile“ lokalisiert und korrekt verwendet werden.
Das obige ist der detaillierte Inhalt vonWie kann ich Datendateien mit der Option --onefile von PyInstaller erfolgreich bündeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!