pyinstaller exe startet über cmd aber nicht über explorer

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
lexaiden
User
Beiträge: 16
Registriert: Montag 15. Juli 2013, 22:11

Hallo,

ich habe ein Programm mit grafischer Oberfläche (QT), dieses läuft unter Linux und Windows problemlos. Für Windows will ich das ganze jetzt mit pyinstaller als eine "exe" zusammenpacken, das hat prinzipiell auch funktioniert. ABER die exe lässt sich nur über cmd (Eingabeaufforderung) starten (läuft dann anstandlos), wenn ich aber z.B. im Explorer einen Doppelklick auf die exe mache dreht sich nur kurz der Mauszeiger/Sanduhr und nix passiert.

Zu meinem Vorgehen:
C:\>cd C:\Users\bel\projekte\Control\src
C:\Users\bel\projekte\Control\src>c:\Python27\Scripts\pyinstaller.exe --onefile --windowed main.py
16 INFO: wrote C:\Users\bel\projekte\Control\src\main.spec
47 INFO: Testing for ability to set icons, version resources...
47 INFO: ... resource update available
47 INFO: UPX is not available.
78 INFO: Processing hook hook-os
188 INFO: Processing hook hook-time
188 INFO: Processing hook hook-cPickle
266 INFO: Processing hook hook-_sre
375 INFO: Processing hook hook-cStringIO
469 INFO: Processing hook hook-encodings
485 INFO: Processing hook hook-codecs
844 INFO: Extending PYTHONPATH with C:\Users\bel\projekte\Control\src
844 INFO: checking Analysis
844 INFO: building Analysis because out00-Analysis.toc non existent
844 INFO: running Analysis out00-Analysis.toc
844 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable
907 INFO: Searching for assembly amd64_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_none ...
907 INFO: Found manifest C:\Windows\WinSxS\Manifests\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b.manifest
907 INFO: Searching for file msvcr90.dll
907 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcr90.dll
907 INFO: Searching for file msvcp90.dll
922 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcp90.dll
922 INFO: Searching for file msvcm90.dll
922 INFO: Found file C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_750b37ff97f4f68b\msvcm90.dll
1032 INFO: Analyzing C:\Python27\lib\site-packages\PyInstaller\loader\_pyi_bootstrap.py
1047 INFO: Processing hook hook-os
1063 INFO: Processing hook hook-site
1078 INFO: Processing hook hook-encodings
1203 INFO: Processing hook hook-time
1203 INFO: Processing hook hook-cPickle
1266 INFO: Processing hook hook-_sre
1391 INFO: Processing hook hook-cStringIO
1500 INFO: Processing hook hook-codecs
1922 INFO: Processing hook hook-pydoc
2063 INFO: Processing hook hook-email
2125 INFO: Processing hook hook-httplib
2172 INFO: Processing hook hook-email.message
2235 INFO: Analyzing C:\Python27\lib\site-packages\PyInstaller\loader\pyi_importers.py
2282 INFO: Analyzing C:\Python27\lib\site-packages\PyInstaller\loader\pyi_archive.py
2344 INFO: Analyzing C:\Python27\lib\site-packages\PyInstaller\loader\pyi_carchive.py
2391 INFO: Analyzing C:\Python27\lib\site-packages\PyInstaller\loader\pyi_os_path.py
2391 INFO: Analyzing main.py
2407 INFO: Processing hook hook-PyQt4
2422 INFO: Processing hook hook-PyQt4.QtGui
2672 INFO: Processing hook hook-PyQt4.uic
2688 INFO: Processing hook hook-PyQt4.QtCore
2860 INFO: Processing hook hook-PyQt4.uic.port_v3
2875 INFO: Processing hook hook-PyQt4.uic.port_v2
2907 INFO: Processing hook hook-xml
2985 INFO: Processing hook hook-xml.sax
3047 INFO: Processing hook hook-pyexpat
3078 INFO: Hidden import 'codecs' has been found otherwise
3094 INFO: Hidden import 'encodings' has been found otherwise
3094 INFO: Looking for run-time hooks
3094 INFO: Analyzing rthook C:\Python27\lib\site-packages\PyInstaller\loader\rthooks\pyi_rth_qt4plugins.py
8610 INFO: Using Python library C:\Windows\system32\python27.dll
8672 INFO: Warnings written to C:\Users\bel\projekte\Control\src\build\main\warnmain.txt
8688 INFO: checking PYZ
8688 INFO: rebuilding out00-PYZ.toc because out00-PYZ.pyz is missing
8688 INFO: building PYZ (ZlibArchive) out00-PYZ.toc
9594 INFO: checking PKG
9594 INFO: rebuilding out00-PKG.toc because out00-PKG.pkg is missing
9610 INFO: building PKG (CArchive) out00-PKG.pkg
16172 INFO: checking EXE
16172 INFO: rebuilding out00-EXE.toc because main.exe missing
16188 INFO: building EXE from out00-EXE.toc
16188 INFO: Appending archive to EXE C:\Users\bel\projekte\Control\src\dist\main.exe

Wenn das debug vom pyinstaller (c:\Python27\Scripts\pyinstaller.exe --onefile --windowed --debug main.py) einschalte bekomme ich dutzende hinweis fenster was gerade gemacht wird. Es ist sehr schwer so den Unterschied zwischen starten mit Doppelklick und starten über cmd zu finden. Beim starten mit Doppelklick kommt aber irgendwann ein Fenster mit dem Text "Loader: RC: -1 from main" und alle folgenden Meldungen drehen sich rund um das aufräumen der temporär angelegten Dateien. Warum also bekomme ich über cmd gestartet keine Meldung mit "Loader: RC: -1 from main" per Doppelklick aber schon? Sofern das überhaupt der Fehler ist, eigentlich will ich ja nur die Anwendung per Doppelklick starten können.
BlackJack

@lexaiden: Was passiert denn wenn Du die EXE in der cmd-Shell startest, aber *nicht* von dem Verzeichnis aus in dem die EXE liegt? Also wenn das Arbeitsverzeichnis ein anderes ist.
lexaiden
User
Beiträge: 16
Registriert: Montag 15. Juli 2013, 22:11

Faszinierend, das Programm startet auch nur per cmd wenn ich im Verzeichnis mit dem Quellcode bin.

C:\Users\bel>C:\Users\bel\projekte\Control\src\dist\main.exe geht nicht
C:\Users\bel>projekte\Control\src\dist\main.exe geht nicht
C:\Users\bel>cd C:\Users\bel\projekte\Control\src\dist\
C:\Users\bel\projekte\Control\src\dist>main.exe geht nicht
C:\Users\bel\projekte\Control\src\dist>cd ..
C:\Users\bel\projekte\Control\src>C:\Users\bel\projekte\Control\src\dist\main.exe geht
C:\Users\bel\projekte\Control\src>cd dist
C:\Users\bel\projekte\Control\src\dist>C:\Users\bel\projekte\Control\src\dist\main.exe geht nicht
C:\Users\bel\projekte\Control\src\dist>cd ..
C:\Users\bel\projekte\Control\src>dist\main.exe geht

Nachtrag...

Ich habs, pyinstaller packt nicht meine QT UI Datei mit in die exe. Ich lade das UI direkt über uic.loadUi() ohne es vorher in Python Code umzuwandlen. Da hab ich jetzt wohl nur zwei Möglichkeiten, entweder das UI nach Python code compilieren und einbinden oder die UI Datei immer parallel im selben Verzeichnis wie die exe zu haben.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Du kannst auch statische Datei mit in die Exe aufnehmen (--onefile).
https://stackoverflow.com/questions/767 ... er-onefile

Wenn nicht dann müssen die benötigten Datei auch im dist Ordner landen, wie du bereits festgestellt hast.
lexaiden
User
Beiträge: 16
Registriert: Montag 15. Juli 2013, 22:11

Danke für den Hinweis Sr4l, klappt einwandfrei. So gefällt mir das :-)

meine pyinstaller spec

Code: Alles auswählen

# -*- mode: python -*-
a = Analysis(['main.py'],
             pathex=['.\\'],
             hiddenimports=[],
             hookspath=None,
             runtime_hooks=None)
a.datas += [('gui.ui', '.\\gui.ui', 'DATA')]  
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='StepperControl.exe',
          debug=False,
          strip=None,
          upx=True,
          console=False )
erstellt mit:
c:\Python27\Scripts\pyinstaller.exe --onefile --windowed main.py
dann bearbeitet (a.datas... erweitert) und kann nun so verwendet werden:
c:\Python27\Scripts\pyinstaller.exe main.spec
um die exe zu generieren
The Spirit
User
Beiträge: 276
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

hi.
hab das gleiche problem und bin dabei auf deine antwort gestoßen.
jedoch klappt es bei mir nicht.
das ui file wird einfach nicht mit in die exe gepackt.
lege ich das ui file mit in den dist ordner, klappt es wieder.
hast du da ne idee für mich?
danke
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

klappt nicht, gibts nicht.

Starte die exe mal in der Kommandozeile damit man einen Fehler sieht warum deine Exe nicht startet.
Benutzeravatar
sparrow
User
Beiträge: 4184
Registriert: Freitag 17. April 2009, 10:28

Und du musst die zusätzlichen Dateien natürlich in der spec-Datei entsprechend in a.datas aufnehmen. Beispiel findest du weiter oben. Was da als Ressource nicht drin steht, wird auch nicht mit verpackt.
Antworten