EXE-Datei mit PyInstaller erstellen...

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.
Modding
User
Beiträge: 30
Registriert: Sonntag 28. Februar 2016, 21:11

Hallo,

Ich hab das Problem, dass ich in Python ein Programm geschrieben haben, was mir Pythonscripte in EXE-Dateien umwandelt. Das ganze läuft mit PyInstaller. Nun bekomme ich aber immer wenn ich die EXE starte, für maximal eine Sekunde diese Fehlermeldung im cmd Fenster:

Code: Alles auswählen

Traceback <most recent call last>:
	File "<string>", line 10, in <module>
	File "<frozen importlib._bootstrap>", line 2214, in _find_and_load
	File "<frozen importlib._bootstrap>", line 2203, in _find_and_load_unlocked
	File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked
	File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible
	File "C:Python\lib\site-packages\PyInstaller\loader\pyimod03_importers.py"; line 389, in load_module exec<bytecode, module.__dict__>
	File "PyInstaller\__init__.py", line 61, in <module>
	File "site-packages\pkg_resources.py", line 346, in get_distribution
	File "site-packages\pkg_resources.py", line 225, in get_provider 
	File "site-packages\pkg_resources.py", line 669, in require
	File "site-packages\pkg_resources.py", line 572, in resolve
pkg_resources.DistributionNotFound: PyInstaller
PyScript_to_EXE returned -1
Leider habe ich nicht rausgefunden, wie ich ein Screenshot hier schnell einfügen kann :K, deshalb hab ich es kurz abgetippt.
Ich hoffe mir kann hier jemand helfen.
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Mit welchem Befehl wandelst du dein Python-Projekt denn in eine EXE-Datei um?

Hat dein Projekt Abhängigkeiten, die nicht zur Standardbibliothek von Python gehören, d.h. nutzt du Module, die du nachträglich installiert hast? Falls ja: welche?

EDIT: Ich erinnere mich wieder an dich. Ich hatte dir vor ein paar Tagen ja PyInstaller empfohlen. Sind die Abhängigkeiten PyQt5 und requests noch aktuell? Gibt es weitere Abhängigkeiten? Zusätzlich zur Frage mit dem Befehl: Sind beim Umwandeln in die EXE Fehlermeldungen aufgetreten?
Modding
User
Beiträge: 30
Registriert: Sonntag 28. Februar 2016, 21:11

Hay ^^ :D

Ja das Script was ich in eine EXE-Datei umwandeln möchte, enthält sys, os, easygui und so weiter.
Aber es liegt am PyInstaller, weil wenn ich diesen aus dem Script weg nehme kann ich das Script umwandeln und die fertige EXE startet ohne Probleme, nur bringt mir das nichts, weil das Programm halt ohne den PyInstaller nicht funktoniert.

Muss man den PyInstaller vielleicht anders in das Script einbinden?
Zur zeit mach ich das so:

Code: Alles auswählen

import PyInstaller
Das komische ist, dass ich das Script ohne Fehler in eine EXE verwandeln kann, nur beim start der exe meint er halt dann, dass:

Code: Alles auswählen

pkg_resources.DistributionNotFound: PyInstaller
BlackJack

@Modding: *Wo* importierst Du `PyInstaller` und warum? Wenn Du das in einem Modul tust welches zu Deinem Programm gehört, dann gehört ja letztendlich auch PyInstaller selbst zu Deinem Programm. Was nicht wirklich Sinn macht.
Modding
User
Beiträge: 30
Registriert: Sonntag 28. Februar 2016, 21:11

@BlackJack

Ich importiere es direkt in mein Script, weil ich so hoffe das es mit in die EXE reingepackt wird, was aber nicht klappt, weil ich möchte auch, dass das Programm auf einem PC läuft, der jetzt kein Python oder PyInstaller installiert hat. Ja das wäre jetzt sehr unlogisch aber ich möchte halt eine EXE wo alles drinnen ist und wo man nicht erst noch auf dem PC iwas dazu in sein eigenes Python installieren muss.

Aber bis jetzt schaff ich es einfach nicht, dass der PyInstaller mit in die EXE gepackt wird... weil wenn ich ihn am Anfang meines Scriptes importiere, kommt direkt nach dem start der fertigen EXE, der Fehler von oben.

Und wenn ich den PyInstaller nicht importiere läuft halt das Script nicht auf einem PC, wo der PyInstaller nicht installiert ist...

Hat jemand eine Idee oder geht das garnicht, was ich vorhabe? :?:
BlackJack

@Modding: PyInstaller gehört nicht in Dein Skript. Wozu willst Du *PyInstaller* mit in die EXE packen? Das macht keinen Sinn‽ Du verwendest das offensichtlich falsch. Das Programm hat Dokumentation.
Modding
User
Beiträge: 30
Registriert: Sonntag 28. Februar 2016, 21:11

@BlackJack

Wo zu ich das in der EXE haben möchte, steht oben drüber aber okay noch mal.

Mein Script ist die EXE, die EXE wird auf einem PC ohne alles ausgefügt, es ist nur die EXE auf dem PC.
Alles Funktioniert, nur der PyInstaller fehlt halt ganz logischer weiße, wie bekomme ich den PyInstaller jetzt so in meine EXE, dass der Benutzer nichts weiter installieren muss, sondern nur meine EXE ausführt?
(Es soll auch nichts auf dem PC des Benutzers Installiert werden.)
BlackJack

@Modding: Warum willst Du denn PyInstaller mit in der EXE haben? Was machst Du damit? Also auf dem Rechner von demjenigen der Dein Skript ausführt?
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Wenn du PyInstaller in dem Script importierst das du mit PyInstaller als EXE packen willst, dann bist du vielleicht der erste der das probiert :wink:
Modding
User
Beiträge: 30
Registriert: Sonntag 28. Februar 2016, 21:11

Sr4l hat geschrieben:Wenn du PyInstaller in dem Script importierst das du mit PyInstaller als EXE packen willst, dann bist du vielleicht der erste der das probiert :wink:
Das kann gut sein. ^^
Aber es muss doch trotzdem irgend eine Lösung geben... ich meine so vielseitig Python ist wird das hoffentlich irgendwie möglich sein. :|
BlackJack

@Modding: Kannst Du bitte mal *richtig* Erklären was Du da eigentlich machen willst? Du importierst in Deinem Programm also `PyInstaller`. Und was machst Du dann in Deinem Programm mit dem Modul? Was soll Dein Programm machen damit es PyInstaller benötigt? Also das Programm selbst, nicht dafür das Du Dein Programm zu einer EXE machst, denn dazu brauchst *Du* PyInstaller, aber das Programm nicht.
Modding
User
Beiträge: 30
Registriert: Sonntag 28. Februar 2016, 21:11

@BlackJack

Mein Programm soll jedes beliebige Python-Script in eine EXE umwandeln. Dazu baut es erst den Befehl zusammen und führt ihn dann über os.popen(command) aus und ich glaube genau darin liegt das Problem....

Weil das Programm benötigt dann auf dem System den PyInstaller... und das muss ich irgenwie in der EXE mit geben.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Die Programm Packer müssen die Abhängigkeiten (sprich benutzen Bibliotheken) suchen und dann kopieren. Das heißt dein Programm ist schon kein "vollständiges Python", es kann also auch nicht jedes beliebige Python Programm in eine EXE packen, selbst wenn man das PyInstaller Problem löst.
Modding
User
Beiträge: 30
Registriert: Sonntag 28. Februar 2016, 21:11

Sr4l hat geschrieben:Die Programm Packer müssen die Abhängigkeiten (sprich benutzen Bibliotheken) suchen und dann kopieren. Das heißt dein Programm ist schon kein "vollständiges Python", es kann also auch nicht jedes beliebige Python Programm in eine EXE packen, selbst wenn man das PyInstaller Problem löst.
Kann ich irgendwie den Pfad zu der Benutzerbibliothek direkt mit angeben?
Und hättest du einen Lösungsansatz für das PyInstaller-Problem?
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Modding hat geschrieben:
Sr4l hat geschrieben:Die Programm Packer müssen die Abhängigkeiten (sprich benutzen Bibliotheken) suchen und dann kopieren. Das heißt dein Programm ist schon kein "vollständiges Python", es kann also auch nicht jedes beliebige Python Programm in eine EXE packen, selbst wenn man das PyInstaller Problem löst.
Kann ich irgendwie den Pfad zu der Benutzerbibliothek direkt mit angeben?
Und hättest du einen Lösungsansatz für das PyInstaller-Problem?
1. Welcher Benutzerbibliothek?
2. Nein. Ich schätze PyInstaller ist schlicht so programmiert sich selbst nicht mit zu packen.
BlackJack

@Modding: Ich würde mal sagen Du versuchst da etwas was nicht so einfach geht und wofür man wirklich Ahnung haben muss von dem was man da tut. Das ist IMHO kein sinnvolles Anfängerprojekt und es löst IMHO auch kein wirklich dringliches Problem. Für einfache Sachen braucht man kein zusätzliches Programm, bei vielen etwas komplexeren Projekten muss man irgendwelche Problemchen umschiffen die ein Programm nicht automagisch lösen kann, und vor allem braucht man beim Entwickeln und Testen eines Programms ja sowieso ein Python auf dem System. Was soll dann ein Programm zum Umwandeln in eine EXE ohne das man Python installiert hat?

Und ich folge der Vermutung von Sr4l das Du wahrscheinlich einer der ersten bist die versuchen PyInstaller mit PyInstaller in eine EXE zu verpacken. Da wäre zuerst mal die Frage ob das überhaupt geht und vorgesehen ist dass das geht.
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich stimme meinen Vorpostern zu: Eine One-File-EXE ist vornehmlich für DAUs gedacht, die einfach nur wollen, dass ein Programm läuft und keine Lust bzw Kompetenz haben, um sich darum zu kümmern, dass irgendwelche Abhängigkeiten wie Laufzeitumgebungen und diverse Bibliotheken gesondert installiert werden.

Ein Programm, welches (vermutlich mit einer grafischen Oberfläche) Python-Skripte zu einer EXE konvertiert und dafür im Hintergrund PyInstaller benutzt, richtet sich keinesfalls an den typischen DAU, sondern an Entwickler. Die haben sinnigerweise bereits Python auf ihrem Rechner installiert, weil sie damit ja ihr Programm entwickelt und getestet haben. Und die sollten auch fähig sein, `pip` anzuwenden, um Python-Pakete samt Abhängigkeiten automatisiert installieren zu lassen. Wenn du denen das Leben leichter machen willst, dann beschäftige dich lieber mit der Funktionsweise von `pip` und liefere dein Projekt so aus, dass es bequem mit allen Abhängigkeiten via `pip` installiert werden kann.
Modding
User
Beiträge: 30
Registriert: Sonntag 28. Februar 2016, 21:11

Sr4l hat geschrieben: 1. Welcher Benutzerbibliothek?
Die Programm Packer müssen die Abhängigkeiten (sprich benutzen Bibliotheken) suchen und dann kopieren.
Diese Benutzerbibliotheken die du in deiner Antwort vorher angesprochen hast.
Sr4l hat geschrieben:2. Nein. Ich schätze PyInstaller ist schlicht so programmiert sich selbst nicht mit zu packen.

Und wenn ich meine EXE mit py2exe generieren würde? Würde das diese vielleicht mit dem PyInstaller packen?
BlackJack hat geschrieben:Was soll dann ein Programm zum Umwandeln in eine EXE ohne das man Python installiert hat?
snafu hat geschrieben:...sondern an Entwickler. Die haben sinnigerweise bereits Python auf ihrem Rechner installiert, weil sie damit ja ihr Programm entwickelt und getestet haben.
Ja also es hat bestimmt schon jeder der das Programm benutz Python auf dem PC, weil das Programm ja einfach nur die lästigen cmd eingaben sparen soll und der Benutzer einfach nur sein Programm und Icon und ein paar kleine Einstellungen über Check-boxen macht und den Rest das Programm übernimmt.
Das mit kein Python auf dem PC war nur zur Verdeutlichung, dass ich alles was das Programm benötigt um einwandfrei zu funktionieren gerne in eine EXE stecken würde und es dann unabhängig von der Pythonversion auf dem PC des Anwenders läuft, weil ich befürchte immer, dass das Programm wenn es abhängig von der Laufzeitumgebung des Benutzer ist, dass es zu Kompatibilitätsproblemen kommen kann.
BlackJack hat geschrieben:Und ich folge der Vermutung von Sr4l das Du wahrscheinlich einer der ersten bist die versuchen PyInstaller mit PyInstaller in eine EXE zu verpacken. Da wäre zuerst mal die Frage ob das überhaupt geht und vorgesehen ist dass das geht.
Ja das kann schon gut sein, weil mir passiert sowas öfters...
Leider ist die Frage nicht so schnell beantwortet weil ich habe auch noch nichts hilfreiches zu meinem Problem im Internet gefunden....
snafu hat geschrieben:`pip` und liefere dein Projekt so aus, dass es bequem mit allen Abhängigkeiten via `pip` installiert werden kann.
Kann man darüber auch ein "grafisches Programm" ausliefern?
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Modding: Du willst also eine Oberfläche für PyInstaller schreiben. Dann sollte natürlich der eingesetzte PyInstaller zur installierten Python-Version kompatibel sein und nicht zu der Version, die Deine Oberfläche einsetzt, was darauf hinaus laufen würde, dass Deine Oberfläche PyInstaller als externes Programm aufruft und damit nicht mehr in Deine Oberfläche eingebunden sein kann/muß.
Modding
User
Beiträge: 30
Registriert: Sonntag 28. Februar 2016, 21:11

Sirius3 hat geschrieben:@Modding: Du willst also eine Oberfläche für PyInstaller schreiben. Dann sollte natürlich der eingesetzte PyInstaller zur installierten Python-Version kompatibel sein und nicht zu der Version, die Deine Oberfläche einsetzt, was darauf hinaus laufen würde, dass Deine Oberfläche PyInstaller als externes Programm aufruft und damit nicht mehr in Deine Oberfläche eingebunden sein kann/muß.
Ja das schon so läuft es ja im Moment. Aber genau das will ich ja nicht, weil da muss der Nutzer das ja erst alles installieren... :|
Antworten