py2exe und gtk

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
caziel
User
Beiträge: 6
Registriert: Freitag 2. Dezember 2005, 13:45

hallo,

erstmal kurz was zu mir :D also ich bin student, mittlerweile in python ziemlich firm, und kein newbie in sachen programmieren ;)

meine aufgabe war: mein prof meinte ich soll einen jabber instant messenger in python programmieren, soweit so gut, das programm steht, sowohl server als auch auf client seite. ich hab erst mit tkinter rumgespielt, dann aber ziemlich schnell festgestellt, das es mir nicht den umfang an funktionalität liefert, und bin deshalb aufs gtk framework umgestiegen. soweit so gut, hab das ding fertig programmiert

mein problem: also zur vorstellung möchte ich natürlich nicht python+ packages +gtk-framework etcpp installieren müssen, deshalb forschte ich ne weile im netz, und stiess ziemlich schnell auf py2exe, klasse dachte ich mir :D
nachdem ich mich damit eingefuxxt hatte, fing ich dann auch an zu kompilieren...

wobei sich mir 2 varianten boten:
1. gtk nicht mit zu kompilieren, und ein gtk runtime enviroment auf dem zielrechner zu installieren:

Code: Alles auswählen

# setup.py
from distutils.core import setup
import py2exe

opts = {
    "py2exe": {
        "includes": "pango,atk,gobject",
        "dll_excludes": [
        "iconv.dll","intl.dll","libatk-1.0-0.dll",
        "libgdk_pixbuf-2.0-0.dll","libgdk-win32-2.0-0.dll",
        "libglib-2.0-0.dll","libgmodule-2.0-0.dll",
        "libgobject-2.0-0.dll","libgthread-2.0-0.dll",
        "libgtk-win32-2.0-0.dll","libpango-1.0-0.dll",
        "libpangowin32-1.0-0.dll"],
        }
    }
setup(
    windows = [{"script": "thefile.py"}],
    options=opts,
    )
2. gtk mit zu kompilieren:

Code: Alles auswählen

# setup.py
from distutils.core import setup
import py2exe

opts = {
    "py2exe": {
        "includes": ["atk","gobject","gtk"]
        }
    }
setup(
    windows = [{"script": "thefile.py"}],
    options=opts,
    )



nun meine frage: kann man py2exe irgendwie dazu bewegen wirklich nur die module vom gtk-framework zu kompilieren die ich auch verwende, quasi so das gtkRE nicht nötig ist, und der compilierte dateiensatz nicht mehr als 13mb groß ist? :shock:
frage: geht das überhaupt? wenn ja wie löse ich das am besten?
viele danke für all diejenigen die sich mit dieser frage beschäftigen wollen ;)

Edit (Leonidas): Code in Python-Tags gesetzt und in das GTK+-Forum verschoben.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das kam erst letztens in der PyGTK-Liste (Thread "How to package the GTK envirement and the pyGTK with application?").

Kurz zusammengefasst: diese setup.py und dann (nur) den Schritt "Static Way" auf DevWindows befolgen. Du kannst versuchen die GTK-DLLs mit UPX noch zu packen oder einige unnötige zu löschen (musst du aber halt ausprobieren).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
caziel
User
Beiträge: 6
Registriert: Freitag 2. Dezember 2005, 13:45

danke fürs verschieben ;) ich werd mir das morgen mal zu gemüte führen...und dann mal hier bescheid sagen was geklappt hat bzw was nicht...

thx4help
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Hi,
hatte das selbe Problem.
Schau mal hier http://www.python-forum.de/viewtopic.php?p=27104#27104 vieleicht hilfts dir ja weiter :wink:

Gruß
Damaskus
caziel
User
Beiträge: 6
Registriert: Freitag 2. Dezember 2005, 13:45

humm die anleitung scheint mir recht gut, ich hab jetzt auch endlich mal wieder zeit mich damit weiter zu beschäftigen...frage ist nur:

Code: Alles auswählen

data_files=[("glade", glob.glob("src/*.glade")) 
wo kommen diese glade dateien her? die hab ich mir bei mir ordner net, muss ich die auch irgendwo her darein kopieren?

edit: er hats trotzdem kompiliert und es geht anscheinend auch ohne diese glade dateien...danke :)
ist jetzt aber trotzdem 22mb groß :shock:
Zuletzt geändert von caziel am Mittwoch 7. Dezember 2005, 13:04, insgesamt 1-mal geändert.
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Die brauchst du nur wenn du mit glade arbeitest ansonsten die ganze Zeile löschen.

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

caziel hat geschrieben:wo kommen diese glade dateien her? die hab ich mir bei mir ordner net, muss ich die auch irgendwo her darein kopieren?
Nein, Glade Dateien beinhalten die GUI im XML-Format. Wenn du sie aber in Python geschreiben hast, brauchst du auch kein Glade.
caziel hat geschrieben:ist jetzt aber trotzdem 22mb groß :shock:
Das ist eben das Problem mit GTK. du kannst es noch mit UPX versuchen kleinerzupacken.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
caziel
User
Beiträge: 6
Registriert: Freitag 2. Dezember 2005, 13:45

danke für eure antworten, die community gefällt mir :)

humm hab mal nach upx geschaut und festegestellt das es wohl nur für executables einsetzbar ist :? stimmt das so?

hier mal ne philosophische anmerkung:

um python wirklich "groß" rauszubringen müsste es möglich sein auch wirklich single executables zu erstellen, das ist das einzigst große manko was ich an python festgestellt hab, ich hab viele sprachen ausprobiert, aber wenige gefallen mir so gut wie python :)
oder eine anständige virtual machine bereitstellen...

sagt mir eure meinungen dazu, vielleicht hab ich auch einen denkfehler oder schlicht und ergreifend wissenslücken :roll:

würd es toll finden wenn wirklich konstruktive beiträge zu diesem thema zustande kommen, und vielleicht kann daraus ja auch ein konzept entstehen was der verbesserung pythons zuträglich wäre, oder auch nur um mein wissen zu erweitern :D
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

caziel hat geschrieben:danke für eure antworten, die community gefällt mir :)
Danke, wir geben uns Mühe.
caziel hat geschrieben:humm hab mal nach upx geschaut und festegestellt das es wohl nur für executables einsetzbar ist :? stimmt das so?
UPX kann unter anderem WinPE Executables komprimieren. Aber DLLs und damit auch PYDs (PYDs sind umbenannte DLLs) sind auch WinPE-Dateien, von dem her kannst du auch sie versuchen. Du kannst auch die library.zip versuchen erstmal nicht mit PYC Dateien, sondern mit PYO Dateien zu füllen, die sich etwas kleiner (py2exe-Option optimize). Dann kannst du die library.zip entpacken und versuchen, sie mit einem besseren ZIP-Kompressor zu packen.
caziel hat geschrieben:um python wirklich "groß" rauszubringen müsste es möglich sein auch wirklich single executables zu erstellen, das ist das einzigst große manko was ich an python festgestellt hab, ich hab viele sprachen ausprobiert, aber wenige gefallen mir so gut wie python :)
Singe-Executable kann py2exe inzwischen (ab version 0.6.1/2 oder irgendwie so um den Dreh rum).
caziel hat geschrieben:oder eine anständige virtual machine bereitstellen...
Was ist an der aktuellen Unanständig. Davon abgesehen gibt es schon verschiedene Portierungen auf andere VMs: PyPy, Parrot, IronPython.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
caziel
User
Beiträge: 6
Registriert: Freitag 2. Dezember 2005, 13:45

ja mit den single executables weiss ich auch, aber halt auch nur dann wenn man wie ich zb keine externen frameworks alà gtk verwendet, das find ich bisserl schade, ich weiss allerdings auch nicht wie andere sprachen damit umgehen, da bei den anderen ein gutes gui framework integriert ist.

ich werds dann mal mit upx versuchen, ich kann mir allerdings nicht vorstellen das ich es auch nur auf 50% der größe gepackt bekomme, trotzdem einen versuch ist es wert...

ja und mit der VM hab ich mich wieder nicht klar ausgedrückt (vll ab und an ein kleines problem von mir ;) ), so an sich ist sie ja net schlecht, nur stört es mich das ich keine standalone vm gefunden habe ( also python ist ja an sich eine VM aber halt noch mit entwicklungsumgebung (IDLE) gibt es denn da ein standalone packet? weiterhin stört mich das wenn ich mein programm starte ja eine gui aufgebaut wird, und ich nichts über die console ausgebe, ich meine hier im forum auch eine lösung dafür gelesen zu haben, in der setup kann ich das ja leicht ändern "console" oder halt eben "windows", nur gehts auch direkt im code?

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

caziel hat geschrieben:ja mit den single executables weiss ich auch, aber halt auch nur dann wenn man wie ich zb keine externen frameworks alà gtk verwendet, das find ich bisserl schade, ich weiss allerdings auch nicht wie andere sprachen damit umgehen, da bei den anderen ein gutes gui framework integriert ist.
Dort wird warscheinlich die WinAPI verwendet.
caziel hat geschrieben:ich werds dann mal mit upx versuchen, ich kann mir allerdings nicht vorstellen das ich es auch nur auf 50% der größe gepackt bekomme, trotzdem einen versuch ist es wert...
Nein, wenn du 10% zusammenbekommst, ist das viel.
caziel hat geschrieben:ja und mit der VM hab ich mich wieder nicht klar ausgedrückt (vll ab und an ein kleines problem von mir ;) ), so an sich ist sie ja net schlecht, nur stört es mich das ich keine standalone vm gefunden habe ( also python ist ja an sich eine VM aber halt noch mit entwicklungsumgebung (IDLE) gibt es denn da ein standalone packet?
Vielleicht interessiert dich ja Movable Python? Ich habe mir auch mal ein ~ 2MB großes Python 2.4.2 ohne Doku, Tkinter und Co. gestrickt, wenn du Interesse hast, kann ich es mal hochladen.
caziel hat geschrieben:weiterhin stört mich das wenn ich mein programm starte ja eine gui aufgebaut wird, und ich nichts über die console ausgebe, ich meine hier im forum auch eine lösung dafür gelesen zu haben, in der setup kann ich das ja leicht ändern "console" oder halt eben "windows", nur gehts auch direkt im code?
Ja, du muss window(s) nutzen statt console.. was meinst du mit "im Code"? Ja, im Code der setup.py.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
caziel
User
Beiträge: 6
Registriert: Freitag 2. Dezember 2005, 13:45

ok dann kann ich mir den aufwand mit upx sparen ;) danke

das mit movable python interessiert mich sehr, hab mir die hp mal angeschaut und ein bisserl quer gelesen, scheint wohl sowas in der art zu sein wie ich mir das vorstelle...nur leider muss dafür ja wieder gtk installiert sein, was die ganze sache wieder problematisch macht, im nachhinein denke ich mir ich hätte mich vielleicht doch weiter mit tkinter rumärgern sollen, dann wären meine ganzen probleme jetzt nicht von belang...wird das tkinter modul denn noch weiterentwickelt, oder ist es eingestellt?

und mit im code mein ich im code :D nein ernsthaft, ich meine nicht im code der setup.py sondern direkt im programmcode...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

caziel hat geschrieben:im nachhinein denke ich mir ich hätte mich vielleicht doch weiter mit tkinter rumärgern sollen, dann wären meine ganzen probleme jetzt nicht von belang...wird das tkinter modul denn noch weiterentwickelt, oder ist es eingestellt?
Nein, Tkinter und Tk sind schon seit Jahren tot, da entwickelt sich zwar irgendwas aber ich habe noch nie etwas neues zu Tk gehört. Es ist schon immer alt gewesen. Bevor ich Tkinter nutze, hätte cih da schon lieber wxPython benutzt.. oder PyQt.
caziel hat geschrieben:und mit im code mein ich im code :D nein ernsthaft, ich meine nicht im code der setup.py sondern direkt im programmcode...
Die setup.py kann Code aus deinem "normalen" Programm importieren, von dem her ist das kein Problem.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten