Seite 1 von 1

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

Verfasst: Dienstag 22. Januar 2008, 16:17
von Pythonierer
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.

Re: Multimedia-Dateien in Exe (vlt. mit PyInstaller) einbind

Verfasst: Dienstag 22. Januar 2008, 16:37
von Leonidas
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?

Verfasst: Dienstag 22. Januar 2008, 16:39
von Zap
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

Verfasst: Dienstag 22. Januar 2008, 18:20
von Pythonierer
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.

Verfasst: Dienstag 22. Januar 2008, 19:49
von Leonidas
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. :)

Verfasst: Dienstag 22. Januar 2008, 22:38
von veers
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.