Kann mir jemand mit einer funktionierenden setup.py helfen?

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Hallo,
ich versuch seit Tagen relativ erfolglos mit py2exe ein GTK Programm zu kompilieren. Hat sowas schonmal jemand gemacht? Denn ich blick da irgendwie überhaupt nicht durch. Folgende Module sollten mit rein:

Code: Alles auswählen

import pygtk
pygtk.require("2.0")
import gtk
import gtk.glade
import string
import sys
import pango
from pysqlite2 import dbapi2 as sqlite
import pickle
import gobject
import time
import subprocess
Ich kann das ganze zwar erfolgreich kompilieren nur bricht das Programm beim starten gleich mit der Meldung

Code: Alles auswählen

Traceback (most recent call last):
  File "programm.py", line 3, in ?
  File "pygtk.pyc", line 73, in require
AssertionError: required version '2.0' not found on system
ab. Kann mir da jemand weiter helfen und was muss da dann alles in die setup.py mit rein?

Gruß
Damaskus
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Damaskus hat geschrieben:Ich kann das ganze zwar erfolgreich kompilieren nur bricht das Programm beim starten gleich mit der Meldung

Code: Alles auswählen

Traceback (most recent call last):
  File "programm.py", line 3, in ?
  File "pygtk.pyc", line 73, in require
AssertionError: required version '2.0' not found on system
ab.
Hi Damaskus!

Das ist ein bekannter Fehler.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import sys
import pygtk
#this is needed for py2exe
if sys.platform == 'win32':
    #win32 platform, add the "lib" folder to the system path
    os.environ['PATH'] += ";lib;"
else:
    #not win32, ensure version 2.0 of pygtk is imported
    pygtk.require('2.0')
import gtk
Nähere Infos findest du hier http://www.anti-particle.com/py2exe.shtml.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

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

Hi,
ich hab leider nochmal ein Problem mit py2exe.
Und zwar wenn ich das Programm "kompiliere" bekomme ich noch folgende Fehlermeldung

Code: Alles auswählen

The following modules appear to be missing
['gdk', 'ltihooks']
Weder eifriges rumexperimentieren noch gegoogle / yahooen und sonstwas hat mich bisher weiter gebracht. Habt ihr dafür ne Lösung parat?

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

Das bekomme ich auch oft (immer?). Ich ignoriere es, da das Programm auch so einwandfrei läuft. Laut PyGTK Mailingliste (oder war es die von py2exe) ist das auch kein Problem.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Danke.

Und gleich kommt auch schon das nächste Problem :cry:

Die Dateien werden erfolgreich kompiliert.
Und wenn ich die EXE dann auf einem Rechner starte auf dem kein Python vorhanden ist, dann will er Massenhaft viele DLL Dateien.

Sollte py2exe die nicht automatisch mit einbinden?

Wenn ich ihm dann die Dlls manuell gebe ist er damit auch zufrieden.
Nur kommt dann folgende Fehlermeldung:

Code: Alles auswählen

Der Prozedureinsprungspunkt "gdk_cairo_create" wurde in der DLL "libgdk-win32-2.0-0.dll" nicht gefunden.
Hat dazu jemand eine Idee?
Auf Rechnern mit installiertem GTK+ und Python passiert das nicht.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Damaskus hat geschrieben: Auf Rechnern mit installiertem GTK+ und Python passiert das nicht.
Hi Damaskus!

Bist du so wie in dieser Anleitung vorgegangen und hast du die Ordner "lib" und "bin" in den "dist"-Ordner kopiert?

http://www.anti-particle.com/py2exe.shtml

Bei mir hat es so funktioniert.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

gerold hat geschrieben:
Damaskus hat geschrieben: Auf Rechnern mit installiertem GTK+ und Python passiert das nicht.
Hi Damaskus!

Bist du so wie in dieser Anleitung vorgegangen und hast du die Ordner "lib" und "bin" in den "dist"-Ordner kopiert?

http://www.anti-particle.com/py2exe.shtml

Bei mir hat es so funktioniert.

lg
Gerold
:-)
Hi,
bin leider erst jetzt wieder dazu gekommen mich darum zu kümmern...

Also mit py2exe 0.4.x ist es so wie oben beschrieben anscheinend möglich.
Da ich allerdings gern mit der 0.6.x arbeiten würd gibts anscheinend nur noch http://www.anti-particle.com/py2exe-0.5.shtml diesen weg. Zumindest funktioniert der bei mir als einzigster. Schade ist nur das dazu gtk mitinstalliert werden muss auf dem Zielrechner.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Damaskus hat geschrieben:Schade ist nur das dazu gtk mitinstalliert werden muss auf dem Zielrechner.
Das muss es nicht, du kannst es dazupacken. Habe ich aber noch nicht geschafft. Irgendwo aber habe ich eine Anleitung gelesen - sorry, weiß nicht mehr wo.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

So nach viel ausprobieren und vielen Tipps hier aus dem Forum hab ichs endlich hinbekommen ein GUI Programm mit GTK+ und py2exe erfolgreich zu kompilieren und auf einem anderen Rechner zum laufen zu bekommen.

Hier mal eine kleine Anleitung dazu.
Vieleicht hilfts ja jemandem weiter :wink:

1. In meineanwendung.py folgende Zeilen an erster Stelle einfügen

Code: Alles auswählen

import os
os.environ['PATH'] += 'gtk/lib;gtk/bin'
2. Folgende setup.py modifizieren und benutzen

Code: Alles auswählen

from distutils.core import setup
import py2exe
import glob
import sys

sys.path.append('src')
includes = ['encodings', 'encodings.utf-8',]

opts = {
    'py2exe': {
        'includes': 'pango,atk,gobject,encodings,encodings.*',
        '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(
    name = 'Meine Anwendung',
    version = '1.0',
    description = ' Meine Anwendung ',
    windows = [{'script': 'src/anwendung.py',
                'icon_resources': [(1, 'src/icon.ico')]}],
    options=opts,
    data_files=[("glade", glob.glob("src/*.glade"))
    ],
)
3. Die Anwenung mit dem Befehl

Code: Alles auswählen

python setup.py py2exe
kompilieren

4. In den nun entstandenen Ordner "dist" folgende Ordner hinein kopieren / erstellen

Code: Alles auswählen

Ordner "gtk" erstellen
Ordner "bin, etc, lib" aus c:\GTK nach dist\gtk kopieren
aus dist\gtk\bin können alle Dateien außer die *.dll gelöscht werden

Um den gtkthemeselector verwenden zu können Datei dist\bin die Datei gtkthemeselector.exe nicht löschen
Ordner dist\share erstellen
Ordner dist\share\themes erstellen
Nach dist\share\themes die gewünschten GTK Themes kopieren
Nun sollte die Anwendung funktionstüchtig sein und auf anderen Rechnern laufen. Evtl. wird noch die Datei "mfc71.dll" benötigt. Einfach aus dem Ordner c:\windows\system32 rauskopieren und in den gleichen Ordner auf dem Zielrechner reinkopieren.
Bzw. falls ein Installer verwendet werden soll per Installer nach c:\windows\system32 kopieren lassen.

Gruß
Damaskus
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Damaskus hat geschrieben: Hier mal eine kleine Anleitung dazu.
Vieleicht hilfts ja jemandem weiter :wink:
Hi Damaskus!

Nicht schlecht! So eine Anleitung ist schon etwas feines. :D

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten