Erstellen Sie Bilder und einige Konfigurationsdateien wie txt und xml Dateien mit Pyinstaller

8

Ich habe Probleme mit dem pininstaller, wenn ich einige Datendateien wie Bilder und Texte zum Python-Programm hinzufüge. Zum Beispiel habe ich eine Symbolleiste mit Symbolen erstellt, und ich speichere sie in einem separaten Ordner namens Bilder. Auch habe ich einige txt und xml Dateien um einige Konfigurationen zu speichern. Diese txt ant xml-Dateien werden in einem anderen Ordner namens data_files gespeichert. Alle Py-Dateien werden in einem anderen Ordner namens source gespeichert.

Wenn ich versuche, dieses Python-Programm mit pyinstaller zu erstellen, kann pyinstaller den gesamten Quellordner erfolgreich erstellen, aber die Ordner images und data_files können nicht erstellt werden. Ich habe die Dokumentation von pyinstaller überprüft, konnte aber keine Lösung finden. Ich habe viele Google-Suchen gemacht und nur diese Resource als hilfreich gefunden, aber das ist eine sehr unzureichende Ressource.

Meine Hauptfrage ist: Wie kann ich eine EXE-Datei mit einem separat erstellten Ordner wie Bilder und Confs mit Pyinstaller erstellen?

Bearbeiten: Ich habe die Lösung gefunden. Wenn Sie die Spezifikationsdatei erstellen, müssen Sie den Parameter a.datas verwenden.

%Vor%

Der obige Spezifikationscode wurde für mein Projekt entwickelt. Wie in diesem Spezifikationscode zu sehen ist, habe ich 3 Icons mit dem Python-Programm erstellt. Wenn das Programm generiert wird, gibt es eine eigenständige ausführbare Datei mit diesen Symbolen.

Aber was, wenn wir so viele Dateien haben? Angenommen, wir haben 1000 Symbole in unserem Programm. Es ist sehr ungenügend, von Hand in die Spezifikationsdatei zu schreiben. Es muss ein Schleifensystem vorhanden sein, um das Dateiverzeichnis zu lesen und diese Dateien dynamisch hinzuzufügen. Aber ich konnte nicht finden, wie man diese Dateien dynamisch hinzufügt. Es gibt keine Chance, diese vielen Dateien manuell hinzuzufügen, denke ich. Wenn jemand weiß, bitte teilen.

    
user1150508 15.01.2012, 15:34
quelle

2 Antworten

5

Beim Erstellen meiner ausführbaren Datei bin ich auf dieses Problem gestoßen. Da die .spec-Datei Python verwendet, war glob-Modul meine Lösung.

%Vor%

Zeile 2 in Bezug auf icon.ico war separat, da sie eine andere Dateierweiterung hatte und daher ausgeschlossen werden kann. '.. \ pathfinder' ist der Pfad für alle Programmdateien (relativ zum pyinstaller-Verzeichnis). glob durchsucht das Verzeichnis nach allen .png-Dateien (ich habe 65 und weigerte sich, sie alle von Hand zu schreiben) und gibt eine Liste von ihnen als Strings zurück, das ganze relative Verzeichnis intakt. Um es in eine Liste von Dateinamen zu trennen, habe ich string.split () für Backslash verwendet. Fügen Sie dann zu jeder benutzerdefinierten Liste ein Tupel des letzten Teils der Zeichenfolgespalte (der am Ende nur der Dateiname des Bildes wäre) und des vollständigen Pfadnamens an. Schließlich, mit einer Liste aller Dateien, fügen Sie es zu a.datas.

Ich habe über die Befehlszeile bestätigt, dass dies tatsächlich korrekt funktioniert, und Sie können die Schleife für alle zusätzlichen Dateierweiterungen erneut kopieren.

Leider scheint meine ausführbare Datei immer noch nicht mit den Dateien erstellt zu werden (oder die ausführbare Datei kann die Dateien nicht in ihren eigenen Daten finden), obwohl ich die Dateinamen scheinbar richtig ziehen und anhängen muss Bilder im selben Verzeichnis, damit es funktioniert; vielleicht habe ich die elemente des tupels falsch sortiert (und damit, wenn ja, solltest du meinen code entsprechend anpassen). Hoffentlich funktioniert diese dynamische Last trotzdem für Sie. imageParts [-1] stellt den Dateinamen jeder .png dar, und eachImage repräsentiert den vollständigen Pfad (oder den relativen Pfad, falls dieser in glob verwendet wurde).

    
Mark 01.12.2012 03:40
quelle
1

Wenn alle Bilder unter demselben Verzeichnis aufgeführt sind, können Sie Tree

verwenden %Vor%     
hithwen 16.01.2014 15:38
quelle

Tags und Links