py2exe, bundle_files

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
Yaso
User
Beiträge: 30
Registriert: Freitag 1. April 2011, 08:00

Hallo zusammen, erst mal Danke, an das Forum und die User, hat mir schon einige male bei meinem Projekt geholfen, jetzt habe ich aber noch ein kleines kosmetisches Problem:

Habe mein Python Programm mit pyGTK erstellt und alles läuft wunderbar. Jetzt muss ich es "nur noch" für die User als Win .exe zur Verfügung stellen.
Habe schon einige Tools probiert, und komme mit cx_freeze und py2exe gut zu recht. Das einzige "Manko" ist, dass die "Testuser" überfordert waren die eigentliche .exe zu finden.

py2exe sollte eigentlich mit "bundle_files" : 1 das ganze in die liblary.zip packen, was es eigentlich auch macht so dass ich 3 Files habe:
fwut.exe > mein Programm
library.zip
w9xpopen.exe

das ist ok, aber wenn ich das Programm starten will, kommt im log die Fehlermeldung:

Traceback (most recent call last):
File "FWUT.py", line 25, in <module>
File "zipextimporter.pyc", line 82, in load_module
File "Update.pyc", line 27, in <module>
File "zipextimporter.pyc", line 82, in load_module
File "gtk\__init__.pyc", line 30, in <module>
File "zipextimporter.pyc", line 82, in load_module
File "gobject\__init__.pyc", line 26, in <module>
File "zipextimporter.pyc", line 82, in load_module
File "glib\__init__.pyc", line 22, in <module>
File "zipextimporter.pyc", line 98, in load_module
ImportError: MemoryLoadLibrary failed loading glib\_glib.pyd

Mit "bundle_files" : 3 klappt es wunderbar.

Könnte natürlich alles in einen Unterordner packen und eine Verknüpfung erstellen, aber so sollte es ja eigentlich auch gehen...

mein Setup.py

Code: Alles auswählen

from distutils.core import setup
import py2exe

includes = ["cairo","gobject","gtk","gio","pango","pangocairo","atk"]
excludes = ['Tkinter',"email","unittest"]


setup(
      windows=[{
                "script":"FWUT.py",
                "icon_resources": [(1, "img/cpu.ico")]                
                }],
                
      options={
                "py2exe":{
                          "excludes":excludes,
                          "bundle_files":2,
                          "includes":includes
                        
                        }
                }
      )
Weiss jemand einen Rat?

Edit: Konfigurationen vergessen:
Win XP SP3
Python27
pygtk-all-in-one-2.22.6.win32-py2.7.msi
The Spirit
User
Beiträge: 276
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

kann dir aus eigener erfahrung nur sagen, das ich es nie geschafft habe mit py2exe wirklich nur eine exe zu bauen.
nun nutze ich pyinstaller und damit klappt es wunderbar.
vielleicht schaust dir das mal.
Yaso
User
Beiträge: 30
Registriert: Freitag 1. April 2011, 08:00

hab pyinstaller schon ausprobiert, bekomme aber Probleme mit pyGTK (weiss nicht mehr welche genau, glaube mit der Win Oberfläche).

Hab jetzt einfach das ganze mit einer Verknüpfung auf das .exe in einem Unterordner gemacht.
Falls ich noch Zeit finde, werde ich mich nochmals dahintersetzen, auch mit pyInstaller.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Schon versucht, "glib" in die includes zu setzen?
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Yaso
User
Beiträge: 30
Registriert: Freitag 1. April 2011, 08:00

Ja, kommt genau das gleiche raus.
Das Modul ist eigentlich ja auch im library.zip vorhanden. Wenn ich es dort manuell herausnehme kommt eine andere Fehlermeldung:
...
File "glib\__init__.pyc", line 22, in <module>
ImportError: No module named _glib

statt:
...
File "glib\__init__.pyc", line 22, in <module>
File "zipextimporter.pyc", line 98, in load_module
ImportError: MemoryLoadLibrary failed loading glib\_glib.pyd

Ich nehme mal an es hackt etwas mit der MemoryLoadLibrary...
BlackJack

@Yaso: Man kann DLLs nicht aus einem ZIP heraus laden. Die müssen AFAIK zwingend als Datei im Dateisystem stehen.
Yaso
User
Beiträge: 30
Registriert: Freitag 1. April 2011, 08:00

BlackJack hat geschrieben:@Yaso: Man kann DLLs nicht aus einem ZIP heraus laden. Die müssen AFAIK zwingend als Datei im Dateisystem stehen.
Ja, das ist mir schon klar, auf welche DLL bezieht sich deine Aussage?
BlackJack

@Yaso: Ich bezog mich auf `glib\_glib.pyd` -- da taucht das Problem doch auf.
Yaso
User
Beiträge: 30
Registriert: Freitag 1. April 2011, 08:00

Ja, aber wenn das prinzipiell nicht funktionieren sollte, dass die glib\_glib.pyd aus dem zip geladen werden kann, wieso sollte py2exe dies mit bundle_files :1 als option anbieten? :K

Oder versteh ich da irgendwas komplett falsch?
BlackJack

@Yaso: Ich habe mich wohl geirrt - man kann wohl DLLs doch aus dem Speicher laden. Das klappt aber anscheinend nicht immer.
Antworten