PyQt4 Programm zu exe Datei

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Hallo,
ich arbeite seit einiger Zeit an einem Programm und jetzt wollte ich mal eine exe Datei draus machen. Normalerweise benutzte ich immer py2exe oder pyinstaller-1.3 aber bei beiden funktioniert es nicht.
Kann mir vielleicht jemand helfen?


lg
MicroKernel
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Warum es mit py2exe nicht funktioniert, kann ich Dir nicht sagen, da ich das Programm nicht verwende. Mit PyInstaller gibts bis Version 1.3 das Problem, das 'hidden imports' nicht aufgelöst werden. Hierzu benötigt PyInstaller sogenannte hooks, die für PyQt4 fehlenden Hook-Dateien findest Du hier http://www.pyinstaller.org/browser/trunk/hooks.
Benutzeravatar
snafu
User
Beiträge: 6833
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Man sollte sich den Pyinstaller derzeit grundsätzlich als SVN runterladen. Der Autor hat seit Monaten (oder sogar Jahren?) kein neues Release herausgebracht und legt einem auch die besagte Vorgehensweise ans Herz.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

http://www.py2exe.org/index.cgi/Py2exeAndPyQt

Funktioniert nicht ist übrigens eine ganz schlechte Fehlerbeschreibung.
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Ich habe jetzt die hooks:
  • hook-PyQt4.py
    hook-PyQt4.Qt.py
    hook-PyQt4.QtCore.py (diese Module importiere ich auch normalerweise in mein Programm)
    hook-PyQt4.QtGui.py (diese Module importiere ich auch normalerweise in mein Programm)
    hook-qt.py
gedownloadet und in den Ordner "hooks" gelegt. Dann habe ich mit dem Befehl "python Makespec.py -F PyQt4-Programm.pyw" diese ".spec" Datei gemacht. Dannach führte ich den befehl "python Build.py PyQt4-Programm.spec" aus.
Doch die exe Datei funktionierte nicht. Um wenigsten einen Fehlercode zu bekommen führte ich die exe Datei in der Konsole aus. Die Fehlermeldung lautete:
Traceback (most recent call last):
File "<string>", line 6, in <module>
ImportError: cannot import name QtGui
Ich verstehe nicht was ich falsch gemacht habe. Kann mir jmd. helfen??

lg
MicroKernel
Zuletzt geändert von microkernel am Mittwoch 17. Juni 2009, 15:49, insgesamt 1-mal geändert.
lunar

Es heißt QtGui, irgendwo ist da also ein Tippfehler.
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

sorry, hab mich beim abschreiben der Fehlermeldung vertippt....
Zuletzt geändert von microkernel am Freitag 19. Juni 2009, 15:42, insgesamt 1-mal geändert.
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Ach kommt schon irgendjemand muss das doch wissen. Ich bin hier unter hunderten von programmieren und keiner weis wie ich ne exe machen kann?
lunar

Du hast doch den Tippfehler im Programm korrigiert, wo ist denn jetzt dein Problem?
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

nein ich hatte mich bein abschreiben der fehlermeldung vertippt. (Ich konnte sie nicht kopieren)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ich kenne mich nur mit `py2exe` aus, allerdings auch nur oberflächlich, da ich dem Distributionsweg nichts abgewinnen kann.
Wie es mit `py2exe` funktioniert steht im verlinken FAQ-Eintrag. Eventuell noch ein paar `include`-Anweisungen, wenn das nicht richtig aufgelöst wird.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Da die SVN-Version von PyInstaller die fehlenden hooks enthält, solltest Du diese vllt. besser verwenden. Es geht aber auch mit der 1.3 und den kopierten hooks, der Fehler steckt vermutlich woanders. Kannst Du mal die PyInstalleranweisungen posten, die zum Erstellen nutzt? Bzw. die Dateiliste des build-Ordners? Gibt PyInstaller irgendwelche Warnungen aus?
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Also zum erstellen der spec-Datei gebe ich in der Eingabeaufforderung "python Makespec.py -F Programm.pyw" ein. Danach gebe ich ein "python Build.py Programm.spec". Dann habe die nicht funktionierende exe Datei.


Pyinstaller hat alle Warnungen in eine Datei geschrieben. Ich habe mal die log-datei hochgeladen. Hier könnt ihr sie sehen.



lg
Mirokernel
Benutzeravatar
snafu
User
Beiträge: 6833
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Es wäre wohl ganz gut, mal dein Programm zu sehen, um den Fehler nachvollziehen zu können...
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Also ich hab das auch schon länger nicht mehr benutzt, aber für Dich nochmal durchexerziert. Mit folgenden Maßnahmen funktionierts:

- PyInstaller SVN-Version runterladen mit "svn co http://svn.pyinstaller.org/trunk" (nicht nur das pyinstaller-Verzeichnis, da das leer ist)
- configure.py durchlaufen lassen, darauf achten, das alle Abhängigkeiten erfüllt sind (z.B. MSVCR90.DLL für Python2.6)
- dann makespec und build

Getestet mit WinXP SP3, Python2.6 und PyQt4.5 und folgendem Skript:

Code: Alles auswählen

from PyQt4 import QtGui

app = QtGui.QApplication([])
win = QtGui.QWidget()
win.show()
app.exec_()
Laß doch mal -F weg, um zu sehen, ob er die PyQt-Bibliotheken überhaupt findet und dem dist-Ordner hinzufügt.
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Endlich! Jetzt funktioniert es! Vielen Dank an alle die mir geholfen haben!

Aber jetzt habe ich noch eine Frage:
Ich habe eine zweite Python Datei in welcher meine ganzen Resourcen für das Hauptprogramm sind. Diese Python Datei wird normalerweise nur importiert sodass die Resourcen zu verfügung stehen. Aber nachdem ich die exe Datei gebildet hatte reichte es nichtmehr diese Python Datei einfach in den Ordner zu legen wo auch die exe ist, um die Resourcen im Hauptprogramm anzeigen zu lassen.
Wie kann ich jetzt diese 2. Python Datei in mein Hauptprogramm einbinden sodass ich nur eine einzigste Datei habe?


lg
MicroKernel
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Darf man fragen, woran es gelegen hat? SVN-Version?

zu der Import-Sache:
PyInstaller löst sowas normalerweise auf, d.h. Deine Imports werden auch dem Binary hinzugefügt. Poste doch mal den Quellcode und was daran nicht funktioniert.

Bsp:
Hauptskript

Code: Alles auswählen

from PyQt4 import QtGui
import klaus

def gib_mir_klaus():    
    return klaus.klaus()

app = QtGui.QApplication([])
win = QtGui.QWidget()
win.show()
app.exec_()
print gib_mir_klaus()
klaus.py

Code: Alles auswählen

import maus

def klaus():
    return 'der klaus ' + maus.raus()
maus.py

Code: Alles auswählen

def raus():
    return 'ist raus'
Die Konsole meldet dann "der klaus ist raus", sowohl klaus.py als auch maus.py werden eingebunden.
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Gar nichts hat an der SVN-Version gefehlt. Die SVN-Version war die Lösung. Nocheinmal Danke.

Und das mit den Imports hat sich jetzt auch geklärt.


Lg
MicroKernel
Benutzeravatar
snafu
User
Beiträge: 6833
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

microkernel hat geschrieben:Die SVN-Version war die Lösung.
Ich habe ja auch nicht zum Spass ganz am Anfang darauf verwiesen. :)

Aber du wolltest ja lieber selber im PyInstaller-Code rumpfuschen. ;)
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

sorry.... :lol:
Antworten