Multimedia-Dateien in Exe (vlt. mit PyInstaller) einbinden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Pythonierer
User
Beiträge: 41
Registriert: Samstag 13. Januar 2007, 15:26

Hallo!

Ich habe mir vor kurzem ein Quiz programmiert, in dem einige Bilder als Texturen und Sounds als Hintergrundgeräusche benötigt werden. Nun wollte ich dieses jedoch auch meinen Freunden zugänglich machen, die leider kein Python inklusive der etwa fünf benötigten Module besitzen, also habe ich PyInstaller zum "kompilieren" oder "freezen" verwendet, was eigentlich auch gut funktioniert hat. Doch nun zu meinen Fragen:

1) Wie kann ich die Sound- und Bild-Dateien mit in die Exe packen, sodass das Programm letztendlich nur noch aus einer Exe besteht?

makespec.py -F -w -K --icon=icon.ico quiz.pyw
build.py quiz.spec

Mit -F bekomme ich das ganze zwar in eine Datei, allerdings sollen dorthin ja noch die Bilder usw.
Mit einem Filejoiner will ichs nicht machen, da dies nur zu unnötigen Problemen mit Antivirenprogrammen führt.

2) Ist es nötig, dass ich mit -K Tk/Tcl mit einbinde? Ich weiß nicht, ob es daran liegt, doch zuvor hatte ich einmal das Problem, dass andere Leute die Programme nicht ausführen konnten, ich jedoch schon. Bei ihnen ist stets sofort das Fenster verschwunden bzw. nicht erschienen.

PS: Ich verwende PyInstaller nicht, um den Quellcode zu verdecken, sondern nur, um den Leuten fünf Installationen zu ersparen.

Danke schonmal für eure Aufmerksamkeit,
Pythonierer.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Pythonierer hat geschrieben:1) Wie kann ich die Sound- und Bild-Dateien mit in die Exe packen, sodass das Programm letztendlich nur noch aus einer Exe besteht?

makespec.py -F -w -K --icon=icon.ico quiz.pyw
build.py quiz.spec

Mit -F bekomme ich das ganze zwar in eine Datei, allerdings sollen dorthin ja noch die Bilder usw.
Mit einem Filejoiner will ichs nicht machen, da dies nur zu unnötigen Problemen mit Antivirenprogrammen führt.
Das geht nicht so einfach. Denn wie willst du dann auf eine Datei zugreifen, die in der EXE-Datei gespeichert ist? Unter C benutzt man dafür Ressources, die zur Laufzeit aus der EXE ausgelesen werden, aber so einfach ist das gar nicht. Was du machen kannst ist die ganzen Sachen zu einer EXE-Datei packen, die automatisch in einen temporären Ordner entpackt wird und von dort gestartet wird. Mit den entsprechenden Performance-Senkungen.
Pythonierer hat geschrieben:2) Ist es nötig, dass ich mit -K Tk/Tcl mit einbinde? Ich weiß nicht, ob es daran liegt, doch zuvor hatte ich einmal das Problem, dass andere Leute die Programme nicht ausführen konnten, ich jedoch schon. Bei ihnen ist stets sofort das Fenster verschwunden bzw. nicht erschienen.
Wenn sie nicht sagen was in dem Fenster stand, dann kann man da raten. Wenn du Tkinter verwendest, musst du das natürlich einbinden.
Pythonierer hat geschrieben:PS: Ich verwende PyInstaller nicht, um den Quellcode zu verdecken, sondern nur, um den Leuten fünf Installationen zu ersparen.
Also effektiv eine. Die von Python, denn das bringt Tkinter mit. Was wären denn die anderen Sachen, die du installieren müsstest?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Du musst alle Sachen die nicht automatisch vom PyInstaller aufgelöst werden können in deinem PyInstaller Skript festlegen. Eine detailierte Beschreibung über alles was du wissen musst findest du in der Doku.

Hier ist zum Beispiel beschrieben wie du alles in ein Self-Extractable Exe packst. Du musst natürlich auch deine eigentliche Applikation so konzipieren das sie nicht mit festen(absoluten) Pfaden auf die externen Komponenten zugreift usw.

http://pyinstaller.hpcf.upr.edu/docs/Ma ... xecutables
Pythonierer
User
Beiträge: 41
Registriert: Samstag 13. Januar 2007, 15:26

Erstmal ein herzliches Dankeschön für die beiden schnellen antworten, mit welchen ich vor morgen eigentlich nicht gerechnet hätte.

Leider habe ich vergessen zu schreiben, dass ich Tkinter als GUI verwende, doch nun weiß ich ja, dass ich Tk/Tcl mit einbinden muss.

Wie dem auch sei, die anderen "fünf Bibliotheken" waren etwas übertrieben, da ich ausversehen Image, ImageTk usw. getrennt gezählt habe, aber Python, PyMedia und PIL sind immerhin schon ein paar Installationen.

:wink: Ich werd mich jedenfalls gleich mal an eure Tipps machen und bedanke mich nochmals für eure Hilfe,

Pythonierer.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Pythonierer hat geschrieben:Wie dem auch sei, die anderen "fünf Bibliotheken" waren etwas übertrieben, da ich ausversehen Image, ImageTk usw. getrennt gezählt habe, aber Python, PyMedia und PIL sind immerhin schon ein paar Installationen.
Du kannst dir auch deine eigene Python-Distribution bauen, so wie ActiveStates ActivePython oder Pylite und dann dort das einpacken was du willst. :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Afaik könntest du die an deine .exe einfach heran hängen. Ob das schlau ist ist eine andere frage. :wink: Ich würde einfach für Windows einen Installer schreiben. Und für Linux eine setup.py. Wenn du es besonders toll machen willst kannst du ja noch rpm sowie deb Pakete bauen.
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Antworten