Tkinter py2exe bundle

Fragen zu Tkinter.
Antworten
KingNothing
User
Beiträge: 9
Registriert: Dienstag 30. November 2010, 11:49

Hi,

ich habe ein einfaches GUI mit Tkinter was ich gerne als einzelne exe packen würde.
zB:

Code: Alles auswählen

from Tkinter import *
root = Tk()

Label(text="Hello World!").pack()
root.mainloop()
dafür habe ich eine einfache setup.py:

Code: Alles auswählen

from distutils.core import setup
import py2exe, sys


sys.argv.append('py2exe')

setup(
     options = {'py2exe': { 'bundle_files':1}},
     console = [{'script': "test.py"}],
     zipfile = None,
)
Wenn ich jetzt das ganze mit py2exe packen lass, bekomme ich eine exe die ca 7MB gross ist, leider kommt beim Ausführen die meldung "Fehler in der Anwendung"... anweisung "written" konnte nicht ausgeführt werden.

Wo liegt hier das Problem mit Tkinter?

Ähnliches funktioniert mit PySide vorbildlich.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ich würde sagen das liegt an deinem "bundle_files", das verträgt sich offensichtlich nicht. Lass die Option weg oder nimm dort die 3 statt der 1

Zudem solltest du bei "setup" für Tkinter explizit ["Tkconstants", "Tkinter", "tcl"] den "excludes" zuweisen. Und auch wenn es nur ein Beispielscript ist, sauber halten sollte man es dennoch

Code: Alles auswählen

import Tkinter as tkinter

if __name__ == "__main__":
    root = tkinter.Tk()
    tkinter.Label(root, text="Hello World!").pack()
    root.mainloop()
Du hast dem Label kein "master" hinzugefügt und *-Importe sind auch nicht schön.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
KingNothing
User
Beiträge: 9
Registriert: Dienstag 30. November 2010, 11:49

Xynon1 hat geschrieben:Ich würde sagen das liegt an deinem "bundle_files", das verträgt sich offensichtlich nicht. Lass die Option weg oder nimm dort die 3 statt der 1
Leider es für mich ein absolutes muss, am Ende eine einfache exe zu erhalten. Gibt es ein Workaround für py2exe+Tkinter?
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Nicht das ich wüsste, ich versteh auch die Intention dahinter nicht,
1. Wieso überhaupt eine "exe" ?
2. Wieso eine nur eine einzige Datei als "exe" für ein Programm ?

Wenn es eine einzelne "exe" sein muss, bleibt dir warscheinlich nichts anderes übrig als ein Container der dann beim ausführen entpackt wird, sprich eine Installation.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
KingNothing
User
Beiträge: 9
Registriert: Dienstag 30. November 2010, 11:49

Einfach aus Gründen des Handlings. Ich finde eine einfache exe ist am bequemsten.
Ich möchte meinen Kollegen nicht zumuten das jeder Python installieren muss. Das mit dem Installer habe ich auch schon gemacht, möchte ich aber ungern hier verwenden da keine Admin rechte auf den PCs vorhanden sind (ich weiss es geht trotzdem, ist aber unschön). Auch ein Installer der nach %TEMP% entpackt und dann startet ist mir zu frickelig.

Ich denke dann bleibe ich wohl einfach bei PySide/PyQt auch wenn Tkinter für meine Anwendungen schneller/eleganter wäre.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Dann nimm doch einfach ein Zip-Archiv entpacken sollte wohl noch jeder hinbekommen.
Zudem könnte man noch einfach in das Zip eine "setup.exe" - welche nicht die Tkinter Applikation ist, sondern zB. eine Verknüpfung auf dem Destop erzeugt.

Finde ich aber im Grunde dennoch Unsinnig, da Python zu installieren, nun keine wirkliche Herrausforderung ist :roll:

Edit:
Tkinter ist denke ich, nicht mal anährend so elegant wie QT, aber jetzt komm ich irgendwie nicht mehr mit - Es ist zu schwierig Python zu installieren, aber die QT-Libs mit zu schleppen ist nicht das Problem :?:
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
BlackJack

@Xynon1: Bei Qt könnte die Lizenz der verwendeten Python-Anbindung eventuell ein Klotz am Bein sein. PyQt ist ja AFAIK immer noch GPL oder teuer.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

BlackJack hat geschrieben:PyQt ist ja AFAIK immer noch GPL oder teuer.
Da müßte man dann wohl zu PySide greifen. So langsam nähern die sich ja Version 1.0 :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@BlackJack
Das ist ja genau das was mich an der Ausage von "KingNothing" wundert -- inwiefern Hilft bei seinem Problem, eine einzelne Exe haben zu wollen, PySide mit PyQt ???
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
The Spirit
User
Beiträge: 276
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

hi.
habe mich vor einiger zeit auch lange mit tkinter und EINER exe beschäftigt, aber letztendlich feststellen müssen, das es nicht geht.
ich mach jetzt letztendlich einen ordner mit allen nötigen daten (in der auch die exe drin liegt) mittels py2exe.
die exe im ordner wird dann für die kollegen einfach mittels einer verknüpfung auf den desktop gelegt oder wo auch immer sie die haben wollen.
das war für mich letztendlich die einfachste lösung vor allem ohne installer oder python installation.
und das klappt heute noch einwandfrei und die kollegen sind zufrieden das ihr pc nicht voll wird mit installationen die sie nicht brauchen.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Mir sind persönlich sind Setups lieber, weil man theoretisch eine sauber Übersicht über sein OS bekommt. Vorausgesetzt das alles sauber an die entsprechenden Stellen installiert wird -- aber das ist bei Windows sowieso eine einzige Katastrophe.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
KingNothing
User
Beiträge: 9
Registriert: Dienstag 30. November 2010, 11:49

Xynon1 hat geschrieben:@BlackJack
Das ist ja genau das was mich an der Ausage von "KingNothing" wundert -- inwiefern Hilft bei seinem Problem, eine einzelne Exe haben zu wollen, PySide mit PyQt ???
Naja mit PySide/PyQt klappt das Single-File-exe-Bundle auf anhieb - ganz im gegensatz zum mitgelieferten Tkinter.
Xynon1 hat geschrieben:Mir sind persönlich sind Setups lieber, weil man theoretisch eine sauber Übersicht über sein OS bekommt. Vorausgesetzt das alles sauber an die entsprechenden Stellen installiert wird -- aber das ist bei Windows sowieso eine einzige Katastrophe.
Ja schon, aber nicht auf diesen PCs. Die Nutzer haben auf C:\Programme kein Zugriff. Ausserdem handelt es sich wirklich um kleine Tools, da wäre eine einfache exe schon handlich.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

KingNothing hat geschrieben:Ja schon, aber nicht auf diesen PCs. Die Nutzer haben auf C:\Programme kein Zugriff. Ausserdem handelt es sich wirklich um kleine Tools, da wäre eine einfache exe schon handlich.
Gerade da lohnt sich doch nicht für jede "exe" ein riesen Framework mit zu schleppen.

Wenn der Nutzer auf C:\Programme nicht zugreifen kann, dann frage ich mich was die den ganzen Tag vor dem Computer machen :roll: Du meintest sicher keine Schreibrechte auf C:\Programme haben, oder ? - Aber selbst hier können sie doch zB. PDFs mit Adobe Reader oder MS Office ausführen...
Also wieso dort nicht einfach Python hinzufügen und eine Verknüpfung auf dem Desktop anlegen mit dem Ziel "C:\Programme\Python27\python.exe C:\Tools\script.py" ? Ich seh da keinen großen Unterschied zu einem anderen Programm.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten