Seite 1 von 1

py2exe, bundle_files

Verfasst: Freitag 1. April 2011, 09:01
von Yaso
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

Re: py2exe, bundle_files

Verfasst: Dienstag 5. April 2011, 12:17
von The Spirit
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.

Re: py2exe, bundle_files

Verfasst: Dienstag 5. April 2011, 13:09
von Yaso
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.

Re: py2exe, bundle_files

Verfasst: Dienstag 5. April 2011, 17:30
von ms4py
Schon versucht, "glib" in die includes zu setzen?

Re: py2exe, bundle_files

Verfasst: Mittwoch 6. April 2011, 07:08
von Yaso
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...

Re: py2exe, bundle_files

Verfasst: Mittwoch 6. April 2011, 08:09
von BlackJack
@Yaso: Man kann DLLs nicht aus einem ZIP heraus laden. Die müssen AFAIK zwingend als Datei im Dateisystem stehen.

Re: py2exe, bundle_files

Verfasst: Mittwoch 6. April 2011, 08:22
von Yaso
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?

Re: py2exe, bundle_files

Verfasst: Mittwoch 6. April 2011, 08:58
von BlackJack
@Yaso: Ich bezog mich auf `glib\_glib.pyd` -- da taucht das Problem doch auf.

Re: py2exe, bundle_files

Verfasst: Mittwoch 6. April 2011, 09:23
von Yaso
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?

Re: py2exe, bundle_files

Verfasst: Mittwoch 6. April 2011, 10:03
von BlackJack
@Yaso: Ich habe mich wohl geirrt - man kann wohl DLLs doch aus dem Speicher laden. Das klappt aber anscheinend nicht immer.