py zu exe: exe startet nicht

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.
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Z.B. cx_Freeze.
MfG
HWK
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

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).
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

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
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

@ 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
TiKaey
User
Beiträge: 84
Registriert: Montag 24. November 2008, 20:48

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)
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

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?
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

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.
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

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
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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 ;)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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.
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

@ 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
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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!
py-mule
User
Beiträge: 58
Registriert: Samstag 3. Januar 2009, 10:42

@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.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Poste mal deine ``setup.py``.
Und als Code hast du nur:

Code: Alles auswählen

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