Executable mit Pyinstaller erstellen --Fehlermeldung--

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
eey
User
Beiträge: 5
Registriert: Mittwoch 1. Dezember 2010, 15:38

Hallo zusammen,

ich habe ein Problem mit Pyinstaller. Und zwar möchte ich gerne aus einem Pythonskript eine .exe erstellen.
Hab hier mal die Forensuche benutzt und bin so auf Pythoninstaller gestoßen, welches ich mir auch
runtergeladen habe. Ich benutze Python 2.7.

Ich bin dann nach folgendem Tutorial (welches ich ebenfalls über die Forensuche gefunden habe) vorgegangen:
http://wiki.python.de/PyInstaller-Tutor ... %20Windows

Mein Problem ist jetzt schon im ersten Schritt, wenn ich über die Eingabeaufforderung das Configure.py Skript
ausführen will erscheinen folgende Fehlermeldungen:

Traceback (most recent call last):
File "C:\Python27\pyinstaller-1.4\Configure.py", line 30, in <module>
import mf
File "C:\Python27\pyinstaller-1.4\mf.py", line 817, in <module>
JUMP_IF_FALSE = dis.opname.index('JUMP_IF_FALSE')
ValueError: 'JUMP_IF_FALSE' is not in list


Weiß jemand hier was das zu bedeuten hat und wo hier der Fehler liegt? Bin eigentlich exakt nach dem Tutorial
vorgegangen und weiß nicht wo das Problem liegen könnte....

Bin für jede Hilfe dankbar :)

Gruß,

eey
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mal ein Schuss ins Blaue: Hast du das gelesen und berücksichtigt?
http://www.pyinstaller.org/wiki/Python26Win
eey
User
Beiträge: 5
Registriert: Mittwoch 1. Dezember 2010, 15:38

Hallo,

vielen Dank für die Antwort, hat mir schon weitergeholfen. Entschuldigung dass ich mich erst jetzt melde,
aber ich mach das von der Arbeit aus und arbeite nur 2 mal die Woche.

Habe allerdings noch Probleme mit pyinstaller, er erstellt mir zwar eine exe die sich auch starten lässt,
allerdings nur auf einem Rechner der Python installiert hat. Auf einem Rechner ohne Pythoninstallation
findet er "python.dll" nicht - Warum sucht das teil überhaupt nach Dingen aus einer Pythoninstallation,
ich dachte der Sinn dieses Skripts wäre es standalone-exen zu generieren...

Weiß jemand ob das geht, und wenn ja was ich falsch mache?

mfg,

eey
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ich kenne PyIntsaller nicht so gut wie Py2Exe deshalb bin ich mir nicht sicher ob das eleganter geht.
Eigentlich sollte er python.dll hinzufügen wenn er sie braucht, bzw. heißt die nicht python27.dll?
  • Gibt es in deinem dist Ordner python.dll oder python27.dll?
  • Gibt es auf dem Python installierten Rechner in C:\Windows\System32 die python.dll?
  • Oder gibt es dort nur die python27.dll?
  • Erzeugst du ne single executable oder nen ganzen Ordner?
Ansonsten kopiere die DLL einfach in deinen dist Ordner mit rüber, entweder manuell oder per Spec File. Geht natürlich nur für den fall das du keine single executable erstellst.
eey
User
Beiträge: 5
Registriert: Mittwoch 1. Dezember 2010, 15:38

Habs jetzt doch noch hingekriegt, man muss nur statt makespec.py --onefile Myscript.py einfach
makespec.py --tk Myscript.py eingeben, dann klappts bei mir.

Wird halt ein Ordner erstellt in dem die exe und alle DLLs die dafür benötigt werden befinden.


Eine einzige, alleinige exe, die alle benötigten DLLs enthällt kann man nicht erstellen, oder?
Also NUR die exe ohne die dafür benötigten DLLs?
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

eey hat geschrieben:Ich bin dann nach folgendem Tutorial (welches ich ebenfalls über die Forensuche gefunden habe) vorgegangen:
http://wiki.python.de/PyInstaller-Tutor ... %20Windows
Wird doch dort erklärt. Single-file executable.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Schon auf die Idee gekommen, `--onefile` und `--tk` mitzugeben?
eey
User
Beiträge: 5
Registriert: Mittwoch 1. Dezember 2010, 15:38

Sr4l hat geschrieben:
eey hat geschrieben:Ich bin dann nach folgendem Tutorial (welches ich ebenfalls über die Forensuche gefunden habe) vorgegangen:
http://wiki.python.de/PyInstaller-Tutor ... %20Windows
Wird doch dort erklärt. Single-file executable.
Ja, wird dort erklärt, aber es funktioniert bei mir so leider nicht, da dann die DLLs nicht gefunden werden.
snafu hat geschrieben:[
Schon auf die Idee gekommen, `--onefile` und `--tk` mitzugeben?
Hab ich gleich mal ausgetestet, funktioniert aber leider nicht. Es wird zwar eine einzige exe erstellt, wenn
ich diese ausführen will erscheint aber folgende Fehlermeldung:

Traceback (most recent call last):
File "<string>", line 7, in <module>
File "C:\Python27\trunk\iu.py", line 436, in importHook
mod = _self_doimport(nm, ctx, fqname)
File "C:\Python27\trunk\iu.py", line 521, in doimport
exec co in mod.__dict__
File "Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client", line 11,
in <module>
File "C:\Python27\trunk\iu.py", line 436, in importHook
mod = _self_doimport(nm, ctx, fqname)
File "C:\Python27\trunk\iu.py", line 521, in doimport
exec co in mod.__dict__
File "Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache",
line 662, in <module>
File "Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache",
line 58, in __init__
File "Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache",
line 649, in Rebuild
File "Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache",
line 65, in _SaveDicts
File "Myskript\build\pyi.win32\Myskript\outPYZ1.pyz/win32com.client.gencache",
line 141, in GetGeneratePath
IOError: [Errno 22] invalid mode ('w') or filename: 'C:\\Python27\\trunk\\Myskri
pt\\dist\\Myskript.exe?844863\\__init__.py'
eey
User
Beiträge: 5
Registriert: Mittwoch 1. Dezember 2010, 15:38

Weiß niemand wo der Fehler liegen könnte?

Eigentlich müsste doch exakt das gleiche erstellt werden wenn ich eine --onefile exe erstelle,
nur dass die eben alles beinhaltet was benötigt wird.

Erstelle ich die exe per makespec.py --tk myskript.py wird alles richtig in den Ordner dist
erstellt und ich hab die exe sowie alle benötigten Dateien.

Estelle ich jetzt aber die exe per makespec.py --tk --onefile myskript.py wird zwar nur eine
exe erstellt, diese funktioniert aber nicht.

Woran liegt das? Eigentlich sollte doch genau das gleiche erstellt werden, warum funktioniert das nicht?
fhoech
User
Beiträge: 143
Registriert: Montag 9. April 2007, 18:26

Der Fehler scheint ja in Zusammenhang mit win32com.client.gencache aufzutreten, da dieses versucht, eine "virtuellen" Pfad, der auf eine Position innerhalb der gepackten exe zeigt, als Datei zu erstellen. Versuch mal folgendes, füge in deinem Code nach

Code: Alles auswählen

import win32com.client
(oder wie auch immer der import bei Dir aussieht) diese Anweisungen ein (ungetestet):

Code: Alles auswählen

import os, sys, win32com

if getattr(sys, 'frozen', False) and os.getenv('_MEIPASS2'):
    win32com.__gen_path__ = os.path.join(os.environ['_MEIPASS2'], 'gen_py')
    os.mkdir(win32com.__gen_path__)
    sys.modules["win32com.gen_py"].__path__ = win32com.__gen_path__
Antworten