Fehler bei Ausführen der EXE die von py2exe erstellt wurde

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
sebastian06
User
Beiträge: 19
Registriert: Mittwoch 16. Dezember 2009, 11:05

Hallo,

ich habe py2exe für meine Anwendung (bestent aus 3 Files: app.py, MplFrame.py, MplPanel.py; wxPython & Matplotlib) ausgeführt. Die Setup2.py ist hier

Code: Alles auswählen

from distutils.core import setup
import py2exe

# Remove the build folder, a bit slower but ensures that build contains the latest
import shutil
shutil.rmtree("build", ignore_errors=True)

# my setup.py is based on one generated with gui2exe, so data_files is done a bit differently
data_files = []
includes = []
excludes = ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'pywin.debugger',
            'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl',
            'Tkconstants', 'Tkinter', 'pydoc', 'doctest', 'test', 'sqlite3'
            ]
packages = ['pytz']
dll_excludes = ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll',
                'tk84.dll']
icon_resources = []
bitmap_resources = []
other_resources = []

# add the mpl mpl-data folder and rc file
import matplotlib as mpl
data_files += mpl.get_py2exe_datafiles()

setup(
    windows=['app.py'],
                          # compressed and optimize reduce the size
    options = {"py2exe": {"compressed": 2, 
                          "optimize": 2,
                          "includes": includes,
                          "excludes": excludes,
                          "packages": packages,
                          "dll_excludes": dll_excludes,
                          # using 2 to reduce number of files in dist folder
                          # using 1 is not recommended as it often does not work
                          "bundle_files": 2,
                          "dist_dir": 'dist',
                          "xref": False,
                          "skip_archive": False,
                          "ascii": False,
                          "custom_boot_script": '',
                         }
              },

    # using zipfile to reduce number of files in dist
    zipfile = r'lib\library.zip',

    data_files=data_files
)
Wenn ich dann aber app.exe im dist-Ordner starte bekomme ich folgendes Fehler-Log (app.exe.log), von dem ich keine Ahnung habe, was das zu bedeuten hat.

Traceback (most recent call last):
File "app.py", line 6, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "MplFrame.pyo", line 6, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "pylab.pyo", line 1, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "matplotlib\pylab.pyo", line 206, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "matplotlib\mpl.pyo", line 3, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "matplotlib\axes.pyo", line 14, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "matplotlib\collections.pyo", line 21, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "matplotlib\backend_bases.pyo", line 32, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "matplotlib\widgets.pyo", line 12, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "matplotlib\mlab.pyo", line 417, in <module>
TypeError: unsupported operand type(s) for %: 'NoneType' and 'dict'

Kann mir da jemand weiterhelfen?

Grüße,

Sebastian
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Das Programm läuft aber, wenn du es nicht packst? Das sieht mir nämlich nicht nach einem Fehler von py2exe aus. Laut Traceback kriegt matplotlib irgendwas Falsches gefüttert.
sebastian06
User
Beiträge: 19
Registriert: Mittwoch 16. Dezember 2009, 11:05

Hallo,

ich bin noch eher ein Anfänger, so dass ich mich in der setup2.py noch nicht so auskenne. Was muss ich denn ändern, wenn ich die Anwendung nicht komprimieren will?

Danke!

Sebi
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Ich meine: Das Programm läuft, wenn du es einfach nur ausführst? Ich glaube wie gesagt nicht, daß der Fehler beim Packen mit py2exe passiert, sondern daß du schlicht noch einen Programmfehler hast.
sebastian06
User
Beiträge: 19
Registriert: Mittwoch 16. Dezember 2009, 11:05

Ok. Aber das Programm läuft ohne Probleme.

Python 2.6.4
IPython 0.10
wx --> Version 2.8.10.1
matplotlib --> 0.99.1
numpy --> 1.3


[/img]
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Lösche bitte mal die Logdatei und versuche, das gepackte Programm noch einmal auszuführen. Erscheint die Logdatei wieder?

Danach rufe die .exe mal über die Eingabeaufforderung auf. Welche Fehlermeldung kommt dort?

Nachtrag: Ipython ist eigentlich nicht relevant. Oder startest du das Programm über Ipython? Dann versuche mal, das Programm (.py) über die Eingabeaufforderung zu starten. Nicht daß Ipython irgendwelche Seitenbedingungen schafft, die bei einem "normalen" Start nicht vorhanden sind.


Nachtrag2: Was steht in app.py in Zeile 6?
sebastian06
User
Beiträge: 19
Registriert: Mittwoch 16. Dezember 2009, 11:05

Wenn ich app.exe direkt ausführen, kommt wieder die gleiche Fehlermeldung. Und es wird natürlich das app.exe.log geschrieben.

Hier der Code von app.py:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# generated by wxGlade 0.6.3 on Mon Dec 14 12:39:22 2009

import wx
from MplFrame import MplFrame

if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    MplFrame = MplFrame(None, -1, "")
    app.SetTopWindow(MplFrame)
    MplFrame.Show()
    app.MainLoop()
Im gleichne Verzeichnis wie app.py sind auch noch MplFrame.py und MplPanel.py zu finden.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

So langsam muß ich passen.

Die Fehlermeldung besagt, daß er im Rahmen einer Stringformatierung ein nicht passendes Argument bekommt. Dieses Argument reichst du wahrscheinlich irgendwo in MplFrame an Matplotlib weiter, wo versucht wird, den String zusammenzubasteln. Was genau die Ursache dafür ist, kann ich nicht sagen. Wenn das Programm sonst fehlerfrei läuft, würde ich darauf tippen, daß er versäumt, ein bestimmtes Modul dazuzupacken. Das sollte eigentlich eine entsprechende Fehlermeldung geben. Das es die nicht gibt, könnte einerseits an wxpython liegen (schluckt Fehlermeldungen. Such mal hier im Forum nach sys.excepthook für einen Lösungsansatz), oder daran, daß du mit "try ... except" zu großzügig umgegangen bist. Aber das sind alles nur Vermutungen.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Wenn du noch Anfänger bist, dann lasse doch das packen in eine exe-Datei. Im Normalfall gibt es dafür keinen richtigen Grund. Konzentriere dich besser auf die Python-Seite, davon hast du wahrscheinlich mehr.
Das Leben ist wie ein Tennisball.
sebastian06
User
Beiträge: 19
Registriert: Mittwoch 16. Dezember 2009, 11:05

Das mit der EXE werde ich wohl wirklich besser lassen. Der Plan war, das Ganze in eine EXE zu packen, damit meine Kollegen das Program auch einfach benutzen können, ohne sich voher Python&Co zu installieren.
Aber im Prinzip hast Du Recht, lieber sauber Python installieren und funktionert es ohne Probleme.

GRüße,

Sebi
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sebastian06 hat geschrieben:Der Plan war, das Ganze in eine EXE zu packen, damit meine Kollegen das Program auch einfach benutzen können, ohne sich voher Python&Co zu installieren.
Du kannst auch Python beipacken, das funktioniert genausogut.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten