Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Datendateien mit der Option --onefile von PyInstaller erfolgreich bündeln?

Wie kann ich Datendateien mit der Option --onefile von PyInstaller erfolgreich bündeln?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-23 03:24:131000Durchsuche

How Can I Successfully Bundle Data Files with PyInstaller's --onefile Option?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn