Die Standardantwort des Kopierens GTK + 's ist, etc, zu teilen und lib Verzeichnis des dist-Verzeichnis der Projektes korrekt ist (aber ich sehe jemand mutwillig zerstört hat [1] und ist wird aus der Liste fehlt), immerhin:
- PyGTK nichts anderes als eine dünne Schicht Kleber ist + machen GTK Python verfügbar
- pygobject ist nichts anderes als eine dünne Schicht Kleber machen GObject, GIO, ... zu Python verfügbar
- PyCairo ist nichts anderes als eine dünne Schicht Kleber machen Kairo
auf einem Minimum zu Python verfügbar, können Sie alle drei dieser Bindungen Pakete und aufgrund ihrer Natur brauchen sie sind nutzlos, wenn die zugrunde liegende Plattform nicht ist verfügbar (.dll-Dateien, Konfigurationsdateien, kurz: der ganze Shebang). Deshalb müssen GTK + bin, etc, share und lib in das Verzeichnis dist des Projekts kopiert werden.
Das setup.py-Fragment, das ich vor ein paar Jahren zu [1] gepostet habe, ist jedoch subtil unvollständig. Die richtige Version hätte sein müssen:
from distutils.core import setup
import py2exe
setup(
name = 'handytool',
description = 'Some handy tool',
version = '2.0',
zipfile = 'bin/library.zip',
windows = [{'script': 'handytool.py',
'dest_base': 'bin/handytool'}
],
options = {'py2exe': {'packages':'encodings',
'includes': 'glib, gio, gobject, cairo, atk, pango, pangocairo, gtk'}
}
)
Beachten Sie die Werte für zipfile und dest_base. Mit diesen Optionen Ihre .exe, eine Reihe von .pyd-Dateien und library.zip werden alle in py2exe das dist/bin-Verzeichnis erstellt. Dann, wenn Sie die Verzeichnisse von GTK + in das Verzeichnis von py2exe kopieren, lebt Ihre ausführbare Datei direkt neben libgtk-win32-2.0.0.dll und so weiter wie es sein sollte. Wenn Sie dies nicht tun, kann eine falsch konfigurierte PATH-Umgebungsvariable die (manchmal inkompatiblen) .dll-Dateien beeinträchtigen, die Ihre py2exe'd-Programmdatei lädt.
Also für die obige Einrichtung.py-Datei, die richtige Verzeichnisstruktur dist sollte wie folgt aussehen:
bin/handytool.exe
bin/library.zip
bin/*.pyd (all .pyd files py2exe deemed needed)
bin/* (complete copy of GTK+ runtime bin dir)
etc/* (complete copy of GTK+ runtime etc dir)
share/* (complete copy of GTK+ runtime share dir)
lib/* (complete copy of GTK+ runtime lib dir)
Wenn Sie die oben erhalten korrekt arbeiten werden Sie feststellen, dass das Laden von Bildern finden funktioniert einfach und Sie können einige Teile über Weglassen nachzudenken share/(wie die Übersetzung Dateien, die Sie nicht wollen/müssen) usw.
MVG, Dieter
[1] http://www.py2exe.org/index.cgi/Py2exeAndPyGTK
Edit 05.07.2011: Die Includes-Option für PyGObject 2.28/PyGTK 2.24 wurde korrigiert. Wenn Sie nur PyGObject 2.28 verwenden, enthält die Option includes 'glib, gio, gobject'. Wenn Sie PyGTK verwenden, dann braucht es: 'glib, gio, gobject, kairo, atk, pango, pangocair, gtk'.
Ich bin mir nicht sicher, aber ich vermute, dass Sie gtk-2.0 auf dem System installieren müssen. http://www.gtk.org/download-windows.html –
@Aaron, gtk-2.0 ist auf dem System installiert. –