2013-12-16 10 views
10

Jetzt arbeite ich mit Pyinstaller. Ich habe ein Skript, das Bild von einem img Ordner erhalten ..Pyinstaller: erzeugen -exe Datei + Ordner (im --onefile Modus)

/python 
|----/img 
|----|----icon1.ico 
|----|----icon2.ico 
|----maint.py 

Mein Skript zu generieren .exe

pyinstaller.py --windowed --noconsole --clean --onefile maint.py 

das Problem ist, dass nur die EXE-Datei zu erzeugen, sondern den gesamten Ordner/img wird weggelassen.

Frage: Welche zusätzliche Syntax muss ich in die vorherige Zeile einfügen, um automatisch die .exe Datei +/img Ordner zu bekommen?

aktualisiert 12/18/2013

ich meine: dass nach der Ausführung von pyinstaller.py Skript, mit allen Argumenten, die ich in den/dist-Ordnern sehen muss: die EXE-Datei + die/img Ordner mit allen Dateien Icons oder Bitmaps ich für meine Anwendung

Dank

+0

Was meinen Sie mit "automatisch die .exe-Datei +/img-Ordner" zu bekommen? – Blender

+0

Kopieren Sie diesen Ordner nach dem erfolgreichen Kompilieren in '/ dist'. – poke

+0

@Blender Ich meine: dass nach der Ausführung von pyinstaller.py Skript, mit allen Argumenten, muss ich im/Dist-Ordner sehen: die .exe-Datei + der/img-Ordner mit allen Icons oder Bitmaps-Dateien, die ich für meine Anwendung habe – MigRome

Antwort

12

aktualisieren 2013.12.19

01 haben

Endlich, wir haben es!

0. Ich arbeite mit der aktuellen Version von PYInstaller + Python 2.67 mit Sublime Text als Editor.

1. Falls Ihr Py-Skript einige Dateien, Symbole und Bilder benötigt, müssen Sie eine Funktion einfügen, die diese Dateien aus dem Projektordner (in Entwicklung) oder den temporären Datenordner (im Falle einer Bereitstellung) abruft. Dieses Skript muss in Ihrem Code genau in dem Teil sein, den Sie den Verwandtenpfaden zuordnen, um die Ressourcen zu erhalten. Bitte folgen Sie genau dieser Richtlinie: https://stackoverflow.com/a/13790741

2. Nach dem vorherigen Code müssen Sie zum ersten Mal den pyinstaller-Befehl ausführen - wie ich in meinem Fragepost posten.

3. Öffnen Sie nun Ihre .spec-Datei erzeugt wird, nachdem die Ausführung des PYInstaller (in PYinstaller /) Befehl und fügen Sie nach "a.binaries" -Linie, die nächste Zeile in die EXE() Funktion:

exe = EXE(pyz, 
      a.scripts, 
      a.binaries, 
      Tree('..\\python\\images', prefix='images\\'), 
.... 

beachten Sie, dass in Baum (...) Funktion das erste Argument ist der Ordner außerhalb setzen: was bedeutet, dass ich den gesamten Inhalt dieses Ordners (Hinweis enthalten sein sollen, dass ich setzen ein relativer Pfad zur AppStart.py-Datei) in den Container der Datei meiner .EXE-Datei.

4. Danach Änderung erneut ausführen den pyinstaller Befehl, aber in diesem Fall zeigte auf meine .spec Datei:

pyinstaller.py --windowed --noconsole --clean --onefile AppStart\AppStart.spec 

Und schließlich kann meine App als ausführbare Datei, ohne die Notwendigkeit ausgeführt werden, um zu kopieren und Fügen Sie alle externen Ordner wie erwähnt hinzu. Aber wie immer sehe ich den gut-praktischen Weg.

Vielen Dank für Ihre Unterstützung.

+1

Dies ist der zuverlässigste Weg, den ich gefunden habe, um vollständige Verzeichnisse zu enthalten! Schau, was Leute ohne diese Option tun :) http://StackOverflow.com/a/12033695/2230844 – denfromufa

+0

Die Antwort beantwortet nicht die erste Frage. Es gibt keine Möglichkeit, pyinstaller anzuweisen, Dateien oder Verzeichnisse im Verzeichnis dist selbst zu kopieren, anstatt sie zum Bundle hinzuzufügen. – bitek

Verwandte Themen