Seite 1 von 2

py zu exe: exe startet nicht

Verfasst: Samstag 7. März 2009, 23:40
von py-mule
Hallo zusammen,
nachdem ich mein .py Programm nach Anleitung durch "aus Python mach exe" in eine .exe-Datei überführt habe, erhalte ich zwei Ordner: in dem dist Ordner befindet sich das .exe Programm. Wenn ich es starten möchte, röddelt zwar die Festplatte, aber danach tut sich nichts.

Gibt es eigentlich noch andere Möglichkeiten, als py2exe zu benutzen?

Gruß
py-mule

Verfasst: Sonntag 8. März 2009, 00:20
von HWK
Z.B. cx_Freeze.
MfG
HWK

Verfasst: Sonntag 8. März 2009, 01:00
von py-mule
Danke HWK,

ich habe es gleich ausprobiert und bin somit dem Problem wahrscheinlich etwas näher gekommen. cx_Freeze verarbeitet mit den folgenden Angaben wohl nur Konsolenprogramme:

Code: Alles auswählen

from cx_Freeze import setup, Executable

setup(
        name = "Brainer",
        version = "1.0",
        description = "",
        executables = [Executable("Brainer.py")])
Wenn ich das entstandene exe Programm starte, öffnet sich die dos Konsole und es erscheinen die Kontollausgaben die ich mir noch in der Python Shell ausgeben lasse.

Leider konnte ich der Dokumentation noch nicht entnehmen, was ich ändern muss, wenn ich ein Windows Programm mit Tkinter erstellen möchte.

mit py2exe habe ich es so probiert:

Code: Alles auswählen

from distutils.core import setup
import py2exe

setup(
    name = "Brainer",
    version = "1.0",
    author = "",
    author_email = "",
    windows=["Brainer.py"]
    )
Mit dem Eintrag windows bin ich davon ausgegangen, daß auch ein Windows Programm dabei herauskommt (steht zumindest so in "Python" von Ernesti/Kaiser).

Verfasst: Sonntag 8. März 2009, 09:34
von roschi
hallo!

ich nehme immer den pyinstaller, und hatte noch nie probleme damit. einfach runterladen, configure.py ausfuehren, und dann mit Makespec.py und Build.py deine scripte in eine .exe packen.

hier mal ein beispiel:

Code: Alles auswählen

Makespec.py -w MyScript.py
Build.py MyScript.spec
Makespec.py erzeugt eine .spec-datei, in der informationen stehen, die dann von Build.py ausgelesen werden. der -w parameter sorgt dafuer, dass bei windows kein schwarzes konsolenfenster erscheint. das solltest du dann bei deinem tkinter-programm benutzen. wenn du zusaetzlich noch -F benutzt, wird alles in eine .exe-datei zusammengefasst, und du hast im dist-ordner nicht so viele dll-dateien rumliegen. die einzelne .exe ist dann viel kleiner als die .exe mit den dll-dateien zusammen. allerdings dauert es auch laenger, bis dein programm gestartet wird, da es jedesmal erst in das temporaere verzeichnis entpackt wird.

ich hoffe, das hilft dir weiter

lg
roschi

Verfasst: Sonntag 8. März 2009, 10:54
von HWK
Versuch mal:

Code: Alles auswählen

from cx_Freeze import setup, Executable

setup(
    name = "Brainer",
    version = "1.0",
    description = "",
    executables = [Executable("Brainer.py", base="Win32GUI")])
MfG
HWK

Verfasst: Sonntag 8. März 2009, 18:14
von py-mule
@ HWK: Danke für den Tip, leider funktioniert es so auchnicht

aber:

@roschi: ich habe den pyinstaller runtergeladen und Configure ausgeführt, dabei kam folgendes heraus:


IDLE 2.6.1 ==== No Subprocess ====
>>>
I: computing EXE_dependencies
W: Cannot determine your Windows or System directories
W: Please add them to your PATH if .dlls are not found
W: or install starship.python.net/skippy/win32/Downloads.html
E: lib not found: MSVCR90.dll dependency of C:\Python26\pythonw.exe
E: lib not found: MSVCR90.dll dependency of C:\WINDOWS\system32\python26.dll
I: Finding TCL/TK...
E: lib not found: MSVCR90.dll dependency of C:\Python26\DLLs\_tkinter.pyd
E: lib not found: MSVCR90.dll dependency of C:\Python26\DLLs\select.pyd
E: lib not found: MSVCR90.dll dependency of C:\Python26\DLLs\unicodedata.pyd
E: lib not found: MSVCR90.dll dependency of C:\Python26\DLLs\bz2.pyd
E: lib not found: MSVCR90.dll dependency of C:\Python26\DLLs\tcl85.dll
E: lib not found: MSVCR90.dll dependency of C:\Python26\DLLs\tk85.dll
I: found TCL/TK version 8.5
I: testing for Zlib...
I: ... Zlib available
I: Testing for ability to set icons, version resources...
I: ... resource update unavailable - No module named win32api
I: Testing for Unicode support...
I: ... Unicode available
I: testing for UPX...
I: ...UPX unavailable
I: computing PYZ dependencies...

Da stimmt wohl einiges an meinem System (win XP prof) nicht oder?

Kann mir jemand erklären, wie ich das auf einfache Weise in Ordnug bringen kann?

Könnte ich mein Python Programm in ein einfaches c++ Programm einbinden, indem ich es als Modul lade und dann das c++ Prog ganz normal compiliere? oder würde ich da auf ähnliche Probleme stoßen?

Danke und viele Grüße
py-mule

Verfasst: Sonntag 8. März 2009, 18:24
von TiKaey
W: Cannot determine your Windows or System directories
W: Please add them to your PATH if .dlls are not found
W: or install starship.python.net/skippy/win32/Downloads.html

Das mal gemacht? ;o)

Verfasst: Sonntag 8. März 2009, 18:51
von py-mule
W: Cannot determine your Windows or System directories
W: Please add them to your PATH if .dlls are not found

...wie krieg ich das hin?

Verfasst: Sonntag 8. März 2009, 19:21
von HWK
Die Windows-System-Ordner stehen in aller Regel bereits im path. Wahrscheinlich befindet sich auf dem Rechner MSVCR90.dll gar nicht. Das muss evtl. erst aus dem Net heruntergeladen werden. Mir ging das ähnlich, nachdem ich auf Python 2.6 umgestiegen bin.
py-mule hat geschrieben:@ HWK: Danke für den Tip, leider funktioniert es so auch nicht.
Was funktioniert daran nicht? Gibt es Fehlermeldungen? Ich habe so problemlos Tkinter-Scripts gefreezt. Schau Dir auch mal die Beispiele bei cx_Freeze an. cx_Freeze führt in aller Regel auch zu kleineren Resultaten als py2exe.
MfG
HWK

Verfasst: Sonntag 8. März 2009, 21:37
von py-mule
Den msvcr90.dll habe ich runtergeladen und nach windows/system32 verschoben.

Wenn ich nun Configure.py von pyinstaller laufen lasse sieht es schon besser aus:

I: computing EXE_dependencies
I: Finding TCL/TK...
I: could not find TCL/TK
I: testing for Zlib...
I: ... Zlib available
I: Testing for ability to set icons, version resources...
I: ... resource update unavailable - No module named win32api
I: Testing for Unicode support...
I: ... Unicode available
I: testing for UPX...
I: ...UPX unavailable
I: computing PYZ dependencies...

nur was meint das Programm, wenn es feststellt, es habe TCL/TK gefunden und kann es jedoch nicht finden ... und kein Modul win32api?

Aber es funtionieren weder Umwandlungen mit py2exe, cx_Freeze noch pyinstaller. Es werden zwar build und dist Ordner mit exe Dateien angelegt, wenn ich diese jedoch versuche zu starten passiert nichts.

Verfasst: Sonntag 8. März 2009, 23:25
von py-mule
Um das Problem einzukreisen habe ich eine Datei "Hello World.py" und eine dazugehörige setup.py Datei erstellt, danach veruscht mit py2exe eine exe Datei zu erstellen.

Wie zuvor auch werden build und dist Ordner angelegt, alles sieht gut aus.
Das Hello World.exe Programm startet, schließt aber sofort wieder. Wenn ich rechtzeitig die Pausetaste drücke, kann ich sehen, daß das Konsolenfenster leer ist.

Inzwischen habe ich den python installer ausegührt und die Funktion repair gewählt. Es führt zum gleichen Ergebnis.

Vielleicht kann jemand etwas mit folgenden Meldungen anfangen:

***binary dependencies***
Your executabels also depnd on these dlls which are not included,
you may or may not need to distribute them.

Make shure you have the license if you sitribute any of them, and
make shure you don't distribute files belonging to the operating system.

WSOCK32.dll
USER32.dll
ADVAPI32.dll
SHELL32.dll
KERNEL32.dll

Gruß
py-mule

Verfasst: Sonntag 8. März 2009, 23:46
von cofi
Die Dateien sind Bestandteil von jedem Windows, darüber brauchst du dir keine Gedanken zu machen ... wenn das die einzigen Meldungen sind, dann funktioniert dein Programm übrigens auch. Versuchs mal mit einem input am Ende um es offen zu halten .. dann verfälscht auch keine ominöse Pausetaste das Ergebnis ;)

Verfasst: Montag 9. März 2009, 08:22
von HWK
py-mule hat geschrieben:nur was meint das Programm, wenn es feststellt, es habe TCL/TK gefunden und kann es jedoch nicht finden ... und kein Modul win32api?
In Deiner ersten Fehlermeldung hat er doch TCL/TK version 8.5 offensichtlich noch gefunden. :?
win32api gehört zu Python for Windows. Das hast Du scheinbar nicht installiert.
MfG
HWK

Verfasst: Montag 9. März 2009, 21:42
von py-mule
Hallo zusammen,
HWK hat geschrieben: win32api gehört zu Python for Windows. Das hast Du scheinbar nicht installiert.
HWK
Das ist schonmal ein entscheidender Hinweis: ich habe es installiert, allerdings die 2.5er Version. Nun habe ich die 2.6 installiert.

Py2exe erzeugt weiterhin keine lauffähige exe
config.py von cx_freeze gibt keine Fehlermeldungen mehr aus
cx_freeze erzeugt weiterhin keine lauffähige exe
pyinstaller erzeugt jetzt wenigstens eine exe, auf zum erstemal eine Reaktion des Systems erfolgt:

Microsoft Visual C++ Runtime Library:
Runtime Error!
Pfad ... Brainer.exe
R6034
An application has made an attempt to load the C runtime library incorrectly.

pyinstaller erzeugt auch eine Liste mit Warnungen:

W: no module named posix (conditional import by os)
W: no module named optik.__all__ (top-level import by optparse)
W: no module named readline (delayed, conditional import by cmd)
W: no module named readline (delayed import by pdb)
W: no module named pwd (delayed, conditional import by posixpath)
W: no module named org (top-level import by pickle)
W: no module named posix (delayed, conditional import by iu)
W: no module named fcntl (conditional import by subprocess)
W: no module named org (top-level import by copy)
W: no module named _emx_link (conditional import by os)
W: no module named optik.__version__ (top-level import by optparse)
W: no module named fcntl (top-level import by tempfile)
W: __all__ is built strangely at line 0 - collections (C:\Python26\lib\collections.pyc)
W: delayed exec statement detected at line 0 - collections (C:\Python26\lib\collections.pyc)
W: delayed conditional __import__ hack detected at line 0 - doctest (C:\Python26\lib\doctest.pyc)
W: delayed exec statement detected at line 0 - doctest (C:\Python26\lib\doctest.pyc)
W: delayed conditional __import__ hack detected at line 0 - doctest (C:\Python26\lib\doctest.pyc)
W: delayed __import__ hack detected at line 0 - encodings (C:\Python26\lib\encodings\__init__.pyc)
W: delayed exec statement detected at line 0 - Tkinter (C:\Python26\lib\lib-tk\Tkinter.pyc)
W: __all__ is built strangely at line 0 - optparse (C:\pyinstaller-1.3\optparse.pyc)
W: __all__ is built strangely at line 0 - dis (C:\Python26\lib\dis.pyc)
W: delayed eval hack detected at line 0 - os (C:\Python26\lib\os.pyc)
W: __all__ is built strangely at line 0 - __future__ (C:\Python26\lib\__future__.pyc)
W: delayed conditional __import__ hack detected at line 0 - unittest (C:\Python26\lib\unittest.pyc)
W: delayed conditional __import__ hack detected at line 0 - unittest (C:\Python26\lib\unittest.pyc)
W: __all__ is built strangely at line 0 - tokenize (C:\Python26\lib\tokenize.pyc)
W: delayed exec statement detected at line 0 - bdb (C:\Python26\lib\bdb.pyc)
W: delayed eval hack detected at line 0 - bdb (C:\Python26\lib\bdb.pyc)
W: delayed eval hack detected at line 0 - bdb (C:\Python26\lib\bdb.pyc)
W: delayed __import__ hack detected at line 0 - pickle (C:\Python26\lib\pickle.pyc)
W: delayed __import__ hack detected at line 0 - pickle (C:\Python26\lib\pickle.pyc)
W: delayed conditional exec statement detected at line 0 - iu (C:\pyinstaller-1.3\iu.pyc)
W: delayed conditional exec statement detected at line 0 - iu (C:\pyinstaller-1.3\iu.pyc)
W: delayed eval hack detected at line 0 - gettext (C:\Python26\lib\gettext.pyc)
W: delayed __import__ hack detected at line 0 - optik.option_parser (C:\pyinstaller-1.3\optik\option_parser.pyc)
W: delayed conditional eval hack detected at line 0 - warnings (C:\Python26\lib\warnings.pyc)
W: delayed conditional __import__ hack detected at line 0 - warnings (C:\Python26\lib\warnings.pyc)
W: __all__ is built strangely at line 0 - optik (C:\pyinstaller-1.3\optik\__init__.pyc)
W: delayed exec statement detected at line 0 - pdb (C:\Python26\lib\pdb.pyc)
W: delayed conditional eval hack detected at line 0 - pdb (C:\Python26\lib\pdb.pyc)
W: delayed eval hack detected at line 0 - pdb (C:\Python26\lib\pdb.pyc)
W: delayed conditional eval hack detected at line 0 - pdb (C:\Python26\lib\pdb.pyc)
W: delayed eval hack detected at line 0 - pdb (C:\Python26\lib\pdb.pyc)

Gruß
py-mule

Verfasst: Dienstag 10. März 2009, 08:58
von HWK
Es wird offensichtlich u.a. versucht, Module zu laden, die es nur unter Linux gibt, z.B. posix und fcntl. Um Dir aber genauer helfen zu können, musst Du wohl mal ein Minimal-Script posten, das die Fehler beim Freezen reproduziert.
MfG
HWK

Verfasst: Dienstag 10. März 2009, 11:39
von ms4py
Bist du sicher, dass die exe von py2exe wirklich nicht gestartet wird? Schau mal in der Prozessliste nach.
Könnte sein, dass nur keine GUI geöffnet wird, der Prozess allerdings startet.

Verfasst: Donnerstag 12. März 2009, 22:51
von py-mule
@ ice2k3: ja, es wird wirklich gestartet. Es ist im Taskmanager in "Prozesse" zu sehen. Dadurch, daß aber sofort die geschilderte Fehlermeldung kommt, verschwindet es nach drücken des OK Buttons der Fehlermeldung sofort wieder.

@ HWK: Ok, das mit dem Minimal-Script dauert noch einen Moment, da daß Prog etwas umfangreicher und auch relativ stark verschränkt ist.

Auf jeden Fall funktioniert noch nicht einmal der "Hello World" Versuch.

Gruß
py-mule

Verfasst: Donnerstag 12. März 2009, 23:45
von ms4py
py-mule hat geschrieben:@ ice2k3: ja, es wird wirklich gestartet. Es ist im Taskmanager in "Prozesse" zu sehen. Dadurch, daß aber sofort die geschilderte Fehlermeldung kommt, verschwindet es nach drücken des OK Buttons der Fehlermeldung sofort wieder.
Welche geschilderte Fehlermeldung?
Bei py2exe hast du erwähnt, dass es nicht lauffähig ist. Mehr nicht!

Verfasst: Freitag 13. März 2009, 00:26
von py-mule
@ice2k3: Diese...
pyinstaller erzeugt jetzt wenigstens eine exe, auf zum erstemal eine Reaktion des Systems erfolgt:


Microsoft Visual C++ Runtime Library:
Runtime Error!
Pfad ... Brainer.exe
R6034
An application has made an attempt to load the C runtime library incorrectly.

Verfasst: Freitag 13. März 2009, 07:44
von ms4py
Poste mal deine ``setup.py``.
Und als Code hast du nur:

Code: Alles auswählen

#!/usr/bin/env python
print "Hello, World!"
:?: