Py2Exe bindet package nicht ein

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
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

Hallo,

aus irgendeiner mir nicht erklärbaren Ursache, funktioniert mein py2exe nicht mehr. Ich scheine zwischen dem letzten Compilieren und nun ein paar Pakete aktualisiert haben und nun spuckt die neu compilierte .exe diese Fehlermeldung beim Start aus:

Code: Alles auswählen

Traceback (most recent call last):
  ...
  File "sqlobject\__init__.pyo", line 1, in <module>
  File "sqlobject\main.pyo", line 40, in <module>
  File "sqlobject\dbconnection.pyo", line 19, in <module>
  File "sqlobject\col.pyo", line 30, in <module>
  File "formencode\__init__.pyo", line 1, in <module>
  File "formencode\api.pyo", line 9, in <module>
ImportError: No module named pkg_resources
Nun habe ich das egg (setuptools-0.6c5-py2.5.egg) per Hand entpackt mit dem Resultat, dass die Fehlermeldung der .exe etwas anders aussieht:

Code: Alles auswählen

Traceback (most recent call last):
  ...
  File "sqlobject\__init__.pyo", line 1, in <module>
  File "sqlobject\main.pyo", line 40, in <module>
  File "sqlobject\dbconnection.pyo", line 19, in <module>
  File "sqlobject\col.pyo", line 30, in <module>
  File "formencode\__init__.pyo", line 1, in <module>
  File "formencode\api.pyo", line 20, in <module>
  File "formencode\api.pyo", line 17, in get_localedir
  File "pkg_resources.pyo", line 800, in resource_filename
  File "pkg_resources.pyo", line 1221, in get_resource_filename
NotImplementedError: resource_filename() only supported for .egg, not .zip
Nun wird es langsam schwierig für mich den Fehler weiter zu verfolgen...

Hat noch jemand eine Idee oder einen ähnlichen Fehler schon einmal gehabt? Ich habe so das ungute Gefühl, dass easy_setup das Problem ist und es dieses Paket war, das ich zwischenzeitlich geupdated hatte... Bevor ich sämtliche älteren Versionen durchprobiere, wollte ich aber hier lieber fragen.

lunas
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

Was ist los? Keine Bemerkungen oder Ratschläge? Gibt es hier denn keine Programmierer von Windowsapplikationen, die sich nicht mit py2exe herumschlagen? Wenn doch, dann wäre ich über eine kurze Aufstellung der verwendeten Modulversionen sehr dankbar. Vor allem die Version von sqlobject wäre sehr interessant, denn ich denke das könnte eine Fehlerquelle sein.

Ich verwende
  • Python 2.5.1
    formencode-0.7.1-py2.5
    py2exe-0.6.6-py2.5-win32
    setuptools-0.6c5-py2.5
    sqlobject-0.10dev_r2576-py2.5
Eine einfache hello world Anwendung zu übersetzen, funktioniert. Also ist py2exe und meine restliche Python-Installation nicht völlig verpfuscht...

Für jeden der Sache dienlichen Kommentar wäre ich sehr dankbar.[/list]
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

Also der Verdacht, dass es an SQLobject liegt erhärtet sich. Wenn ich das Minimalbeispiel von der SQLobject homepage in eine .exe umwandle, dann kommt auch folgender Kommentar:
...
The following modules appear to be missing
['DNS', 'DateTime', 'DateTime.ISO', 'MySQLdb', 'MySQLdb.constants.CR', 'MySQLdb.
constants.ER', 'Sybase', 'adodbapi', 'email.Generator', 'email.Iterators', 'emai
l.Utils', 'kinterbasdb', 'mx', 'mx.DateTime', 'mx.DateTime.ISO', 'pgdb', 'psycop
g', 'psycopg2', 'pymssql', 'pysqlite2', 'sapdb', 'sqlite']

*** binary dependencies ***
Your executable(s) also depend on these dlls which are not included,
you may or may not need to distribute them.

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

USER32.dll - C:\WINDOWS\system32\USER32.dll
SHELL32.dll - C:\WINDOWS\system32\SHELL32.dll
WSOCK32.dll - C:\WINDOWS\system32\WSOCK32.dll
ADVAPI32.dll - C:\WINDOWS\system32\ADVAPI32.dll
msvcrt.dll - C:\WINDOWS\system32\msvcrt.dll
WS2_32.dll - C:\WINDOWS\system32\WS2_32.dll
KERNEL32.dll - C:\WINDOWS\system32\KERNEL32.dll
Bevor ich die im ersten Post beschriebene Änderung (Extrahieren des eggs) durchgeführt hatte, wurde auch pkg_resource als missing module gelistet.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ich will einfach mal antworten. Ich hatte zwar noch nie ein Import Modul mit py2exe. Aber wie wärs mal mit pyinstaller als alternative. Oder dem Py2exe explezit sagen was er includen soll.
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

Na bitte. Wenigstens einer, der hierzu etwas sagen kann - danke.

Ich denke das mit dem inkludieren scheine ich durch das Entpackend des eggs gelöst zu haben. Nur leider wird nun eine andere Fehlermeldung angezeigt, wenn ich die .exe starte.

Code: Alles auswählen

Traceback (most recent call last):
  File "hello.py", line 2, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "sqlobject\__init__.pyo", line 1, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "sqlobject\main.pyo", line 40, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "sqlobject\dbconnection.pyo", line 19, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "sqlobject\col.pyo", line 30, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "formencode\__init__.pyo", line 1, in <module>
  File "zipextimporter.pyo", line 82, in load_module
  File "formencode\api.pyo", line 20, in <module>
  File "formencode\api.pyo", line 17, in get_localedir
  File "pkg_resources.pyo", line 800, in resource_filename
  File "pkg_resources.pyo", line 1221, in get_resource_filename
NotImplementedError: resource_filename() only supported for .egg, not .zip
Hier die py2exe setup Datei:

Code: Alles auswählen

from distutils.core import setup
import py2exe
import sys
 
if len(sys.argv) == 1:
    sys.argv.append("py2exe")
 
setup( options = { "py2exe": {"packages" : ["sqlobject"],
                              "compressed": 1,
                              "optimize": 2,
                              #"bundle_files": 1
                              }
                   },
       zipfile = None,
       console = [{"script": 'hello.py'}] )
So sieht die umzuwandelnde .py Datei aus (ein Minimalbeispiel):

Code: Alles auswählen

from sqlobject import *

sqlhub.processConnection = connectionForURI('sqlite:/:memory:')

class Person(SQLObject):
    fname = StringCol()
    mi = StringCol(length=1, default=None)
    lname = StringCol()

Person.createTable()

print 'hello'


Mit der Fehlermeldung kann ich überhaupt nichts anfangen. Scheinbar will formencode irgendeine Ressource laden, die nicht gefunden werden kann, aber das ist reine Spekulation...

Trotzdem noch einmal vielen Dank...
:?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wie wäre es, das ganze mal mit dem PyInstaller zu probieren??? Ist z.Z. IMHO eh die bessere Wahl, siehe auch: http://www.python-forum.de/post-64359.html

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Oder mal was ganz anders: bbfreeze.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hm. Weißt du was bbfreeze besser kann als PyInstaller?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

Okay, ich werde mir mal beide anschauen müssen.

Danke erst mal.
Benutzeravatar
thorbytes
User
Beiträge: 37
Registriert: Samstag 24. Februar 2007, 17:38
Kontaktdaten:

Sieh Dir doch das mal an:
[wiki]PyInstaller-Tutorial für Windows[/wiki]
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

jens hat geschrieben:Hm. Weißt du was bbfreeze besser kann als PyInstaller?
Ich zumindest, bin hier drüber gestolpert:
(in fact it includes some bits from
cx_Freeze and PyInstaller. And it uses the modulegraph_ package,
which is also used by py2app)
Aber ich persönlich schau mir dass jetzt nicht weiter an. Dafür ist mir die Doku einfach ein wenig, sagen wir mal, zu wässrig. Ich glaube auch nicht,
dass es wirklich nur die guten Seiten, jener Vorgänger kopiert hat.
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

Also pyInstaller scheint ganz gut zu laufen. Es gibt allerdings ein kleines Problem bei einem anderen Modul. Nach der Kompiliereung, wenn ich die exe im debug mode starte, erscheint folgende Meldung:

Code: Alles auswählen

importing modules from CArchive
iu
struct
archive
Installing import hooks
out1.pyz
Running scripts
Traceback (most recent call last):
  File "<string>", line 23, in <module>
  File "C:\Programme\pyinstaller_1.2\iu.py", line 312, in importHook
    mod = _self_doimport(nm, ctx, fqname)
  File "C:\Programme\pyinstaller_1.2\iu.py", line 398, in doimport
    exec co in mod.__dict__
  File "D:\Data\Workspace\proj\simplemail.py", line 105, in <module>
    from email.MIMEText import MIMEText
  File "D:\Data\Workspace\proj\buildmyproj\out1.pyz/email", line 79, in __g
etattr__
  File "C:\Programme\pyinstaller_1.2\iu.py", line 334, in importHook
    raise ImportError, "No module named %s" % fqname
ImportError: No module named email.mime.text
 RC: -1 from myproj
OK.
Ich verwende das im Forum vorgestellte sendmail. Allerdings brachte es nichts den Pfad "C:\\Programme\\Python25\\Lib" in den zweiten Parameter pathex des Analysis Konstruktors der .spec Datei einzufügen. Die nicht gefundene Datei liegt bei "C:\\Programme\\Python25\\Lib\\email\\mime\\test.py". Muss man den Pfad evtl. irgendwo anders angeben (nicht, dass ich sowas im manual gelesen hätte, aber man weiß ja nie...)?

Grüße,
lunas
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

Also Module kann man extra angeben. Ich hab´s noch nie gemacht und daher kann es sein, dass dieser Link Table of contents Dir vielleicht nicht weiter hilft.:K

Ah ja, wusste ich doch. - Ich hatte da was zu den pyo´s gelesen: Building Optimized

Aber meiner bescheidenen Meinung nach, handelt es sich jetzt ja nu nicht mehr um Fehler bei der Einbindung des SQL. Ist vielleicht doch irgendwas in Deinem Code noch nicht so ganz richtig, was beim Ausführen des Scriptes gar nicht als Fehler ausgegeben wird?

Zumindest gibt das Traceback schon mal wieder, dass ein Modul gar nicht gefunden wurde und damit würde ich anfangen. :wink:
Am praktischen ist´s doch immer, alles beim Build-Vorgang in einem Ordner zu haben. :wink:
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

Ja Du haste recht. Der SQLObject Fehler tritt nicht mehr auf, was schon einmal erfreulich ist.

Was die text.py Datei angeht: Sie ist Teil der Python Distribution und befindet sich, anders als die nachinstallierten Module, in \Python25\lib\email\mime (und nicht \Python25\lib\site-packages; dieser Pfad wird von pyinstaller scheinbar gefunden). Ich glaube nicht, dass es eine gute Idee ist diese in meinen Arbeitsordner zu kopieren...
lunas
User
Beiträge: 87
Registriert: Samstag 2. Dezember 2006, 10:56

Scheinbar gibt es ein Problem mit der Windows Distibution von Python 2.5.1 und sendmail.py. Die imports müssen geändert werden, sodass z.B. aus der Zeile

Code: Alles auswählen

from email.MIMEImage import MIMEImage
diese Zeile

Code: Alles auswählen

from email.mime.image import MIMEImage
wird. Dann klappt's.


Vielen Dank für eure Hilfe.
Antworten