Seite 1 von 2

pygtk unter Windows wird nicht erkannt

Verfasst: Freitag 27. Oktober 2006, 10:01
von Danshi
Hallo zusammen,

ich beschäftige mich erst seit gestern mit Python und scheitere bereits bei der Installation von pygtk unter Windows. Dazu habe ich auch schon einige Beiträge im Forum gelesen, welche mir aber leider nicht weiterhelfen konnten.
Mein Vorgehen:
- Python 2.5 installiert
- GTK+ (2.10.6) installiert
- PyGTK (2.10.3) installiert
- Glade (3.0.2) runtergeladen und ausgeführt <das läuft schonmal>

Mit Hilfe eines kleinen Programmes habe ich nun die Funktionalität testen wollen. Aber ... Fehler! :(

Traceback (most recent call last):
File "C:\Python25\source\example.py", line 1, in <module>
import pygtk
ImportError: No module named pygtk


Wenn pygtk nicht mit eingebunden ist bekomme ich folgende Fehlermeldung:

Traceback (most recent call last):
File "C:\Python25\source\example.py", line 2, in <module>
import gtk
File "C:\Python25\Lib\site-packages\gtk-2.0\gtk\__init__.py", line 38, in <module>
import gobject as _gobject
ImportError: No module named gobject


Wie lassen sich die Fehler beheben?
Ich bin für jeden Rat dankbar!

Verfasst: Freitag 27. Oktober 2006, 14:29
von Leonidas
Hi Danshi, willkommen im Forum!

Du musst auch PyGObject und vermutlich auch PyCairo installieren, dann sollte es gehen.

Verfasst: Montag 30. Oktober 2006, 08:59
von Danshi
Danke für den Hinweis, Leonidas.

Aber jetzt tritt folgender Fehler auf:

Traceback (most recent call last):
File "C:\Python25\source\example.py", line 3, in <module>
import gtk
File "C:\Python25\lib\site-packages\gtk-2.0\gtk\__init__.py", line 48, in <module>
from gtk import _gtk
File "C:\Python25\lib\site-packages\cairo\__init__.py", line 1, in <module>
from _cairo import *
ImportError: DLL load failed: Die angegebene Prozedur wurde nicht gefunden.


Wo kann ich die dll's einbinden? (In der Umgebungsvariablen funktionierts nicht. )

Verfasst: Montag 30. Oktober 2006, 09:20
von Leonidas
Du musst den Ordner mit den GTK+-DLLs an den %PATH% anhängen und dann neustarten (oder zumindest ausloggen), damit die Variable übernommen wird.

Verfasst: Montag 30. Oktober 2006, 09:54
von Danshi
Hui, schnelle Antwort!

Mit "sys.path" werden doch die Ordner/Unterordner angezeigt, die in meiner definierten PATH-Variablen stehen, oder?

Das sieht bei mir so aus:
['C:\\Python25\\source', 'C:\\Python25\\Lib\\idlelib', 'C:\\Python25\\python25.zip', 'C:\\Python25\\DLLs', 'C:\\Python25\\lib', 'C:\\Python25\\lib\\plat-win', 'C:\\Python25\\lib\\lib-tk', 'C:\\Python25', 'C:\\Python25\\lib\\site-packages', 'C:\\Python25\\lib\\site-packages\\gtk-2.0']

Aber in meiner PATH steht:
C:\Programme\Gemeinsame Dateien\GTK\2.0;C:\Python25

Anmerkung:
Ich prüfte dies auch in der Console (Commadozeile) und hier stehen bei PATH alle Verzeichnisse.

Die dll's werden noch immer nicht erkannt!

Verfasst: Montag 30. Oktober 2006, 10:12
von Leonidas
Danshi hat geschrieben:Mit "sys.path" werden doch die Ordner/Unterordner angezeigt, die in meiner definierten PATH-Variablen stehen, oder?
Nein, sys.path zeigt den %PYTHONPATH% an, d.h. den Pfad in dem Python nach Modulen sucht. Der System-PATH (unter Windows %PATH%) ist unter os.environ['PATH'] zu finden und wie du siehst unterscheidet er sich ziemlich:

Code: Alles auswählen

In [7]: os.environ['PATH']
Out[7]: '/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games'
In [8]: sys.path
Out[8]: ['', '/usr/local/bin', '/usr/lib/python25.zip', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages']
Danshi hat geschrieben:Aber in meiner PATH steht:
C:\Programme\Gemeinsame Dateien\GTK\2.0;C:\Python25
Wo ist denn bei dir der GTK-Kram installiert? In welchem Ordner sind die GTK-DLLs zu finden?
Danshi hat geschrieben:Das erste Verzeichnis wird ignoriert, warum? Oder was passiert da genau?
Nein, es wird nicht ignoriert, denn %PYTHONPATH% hat mit %PATH% nichts zu tun, wie ich es schon oben erklärt habe.

Verfasst: Montag 30. Oktober 2006, 10:36
von Danshi
Der GTK-Kram ist hier installiert:
C:\Programme\Gemeinsame Dateien\GTK\

...und die dazugehörigen DLL's sind dementsprechend in den Unterordnern:
C:\Programme\Gemeinsame Dateien\GTK\2.0\bin;
C:\Programme\Gemeinsame Dateien\GTK\2.0\lib\gtk-2.0\2.10.0\engines;
C:\Programme\Gemeinsame Dateien\GTK\2.0\lib\gtk-2.0\2.10.0\immodules;
C:\Programme\Gemeinsame Dateien\GTK\2.0\lib\gtk-2.0\2.10.0\loaders

Verfasst: Montag 30. Oktober 2006, 10:43
von Leonidas
Dann musst du C:\Programme\Gemeinsame Dateien\GTK\2.0\bin (also mit dem bin-Ordner) in deinen %PATH% aufnehmen.

Verfasst: Montag 30. Oktober 2006, 10:56
von Danshi
Im Moment steht dieser Pfad unter den 'Benutzervariablen meines users'... und das ist scheinbar der Fehler!
Denn es geht noch immer nicht.

Also muss es in die Systemvariablen geschrieben werden.
Doch leider hab ich darauf keinen Zugriff...

Verfasst: Montag 30. Oktober 2006, 11:15
von Leonidas
Danshi hat geschrieben:Im Moment steht dieser Pfad unter den 'Benutzervariablen meines users'... und das ist scheinbar der Fehler!
Denn es geht noch immer nicht.
Du kannst einfach eine Kommandozeile öffnen und dort echo %PATH% eintippen. Wenn dort der GTK-Pfad drin ist, sollte alles ok sein. Wenn nicht, checkst du noch mal die PATH-Einstellungen, meldest dich ab, meldest dich wieder an und guckst wieder, ob %PATH% diesmal korrekt ist.

Verfasst: Montag 30. Oktober 2006, 11:22
von Danshi
KommandozeileEingabe:
V:\>echo %PATH%
C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:\ORANT\BIN;c:\matlabr12\bin\
win32;C:\Programme\QuickTime\QTSystem\;C:\Programme\Gemeinsame Dateien\GTK\2.0\bin;C:\Python25


Der Pfad existiert!
Aber der Fehler bleibt bestehen!

....ImportError: DLL load failed: Die angegebene Prozedur wurde nicht gefunden.

Verfasst: Montag 30. Oktober 2006, 11:36
von Leonidas
Mir fällt jetzt eigentlich nur noch ein, dass du ein Downgrade auf GTK+ 2.8 machen könntest. Dazu deinstalliesrst du den ganzen Kram und installierst das Gladewin32-GTK+ 2.8 sammt PyGTK 2.8 & Co.

Scheinbar ist GTK+ 2.10 noch etwas problematisch.

Verfasst: Montag 30. Oktober 2006, 11:45
von gerold
Danshi hat geschrieben:Doch leider hab ich darauf keinen Zugriff...
Hi Danshi!

Du bist nicht Administrator auf dem Computer. Das ist wahrscheinlich der Grund für deine Probleme. Es ist ziemlich selten der Fall, dass du zum korrekten Installieren eines Programmes ohne Admin-Rechte auskommst. Wahrscheinlich will das Installationsprogramm etwas in die Registry schreiben und darf nicht.

Bei mir ist das zumindest der Fall:

Code: Alles auswählen

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\GTK]

[HKEY_LOCAL_MACHINE\SOFTWARE\GTK\2.0]
"Path"="J:\\Programme\\GTK"
"DllPath"="J:\\Programme\\GTK\\bin"
"Version"="2.8.18"
"VendorVersion"="2.8.18-rc1"

[HKEY_LOCAL_MACHINE\SOFTWARE\GTK\glade]
"Path"="J:\\Programme\\GTK"
Noch etwas könnte ein Problem sein. "Gemeinsame Dateien" --> da ist ein Leerzeichen drinn.

- Alles wieder deinstallieren
- Pfade bereinigen
- Neu starten
- Als Admin anmelden
- Alles in den vorgegebenen Pfad installieren. (C:\Programme\Gtk)
- Verwenden

mfg
Gerold
:-)

Verfasst: Dienstag 31. Oktober 2006, 13:59
von Danshi
Ich danke euch für eure Ratschläge!

Da ich eigentlich die neure Version (2.10) benutzen wollte, bin ich erstmal auf gerold's Vorschlag eingegangen und hab es als Admin versucht.
Aber das Problem war noch immer präsent.
Also versuchte ich nun doch Leonidas Vorschlag...
Und siehe da... mit GTK+ 2.8 und PyGTK2.8 funzts. :D

THX

Verfasst: Sonntag 18. März 2007, 15:03
von DHK
Hallo,
ich bin ebenfalls Python-Neuling und habe ähnliche Probleme wie mein Vorredner.
Ich suchte mir per Google eine Anleitung, um PyGTK zu installieren. Dabei ging ich exakt nach dieser Anleitung vor. Python 2.5 hatte ich schon installiert, also lud ich mir GTK+ und den Windows Port herunter. Danach rebootete ich.
Ich habe ein kleines Test-Script im Internet gefunden:

Code: Alles auswählen

#!/usr/local/bin/python
# example base.py

import pygtk
pygtk.require(2.0)
import gtk

class Base:
	def __init__(self):
		self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
		self.window.show()

	def main(self):
		gtk.main()

print __name__
if __name__ == "__main__":
	base = Base()
	base.main()
Bei der Ausführung dieses Skripts erhalte ich die Fehlermeldung: "Traceback (most recent call last):
File "E:\Eigene Dateien\Programme\test.py", line 4, in <module>
import pygtk
ImportError: No module named pygtk".

Also las ich mir diesen Thread hier durch, deinstallierte Version 2.10 und ersetzte sie mit 2.8; danach ging es immer noch nicht.
Was sind denn PyGObject und PyCairo und wo kriege ich die her? Was ist Glade?
Entschuldigt diese "noobhaften" Fragen meinerseits, aber ich habe jetzt knapp ein Jahr lang nur Perl programmiert, hatte irgendwann diesen unübersichtlichen Code satt und bin zu Python gewechselt. Und ich hoffe, ich bin in der Python-Gemeinschaft willkommen! :D

Gruß

DHK

Verfasst: Sonntag 18. März 2007, 22:21
von Leonidas
Hallo DHK, willkommen im Forum,
DHK hat geschrieben:Also las ich mir diesen Thread hier durch, deinstallierte Version 2.10 und ersetzte sie mit 2.8; danach ging es immer noch nicht.
Was sind denn PyGObject und PyCairo und wo kriege ich die her? Was ist Glade?
Glade ist der GUI-Designer des GTK-Projektes. Damit kannst du dir GUIs zusammenklicken, die dann in sogenannten glade-Dateien (XML) gespeichert werden und die du dann in deinem Programm laden kannst. Musst du aber nicht, du kannst GUIs auch ebenso "von Hand" programmieren.

PyGObject ist der Python-Wrapper für GObject und PyCairo ist diesselbe für Cairo. Du kannst beide von Cedrics Seite herunterladen - inzwischen sind sie alle auf den GNOME-Servern verfügbar.

Verfasst: Montag 19. März 2007, 14:27
von DHK
Hallo,
ich habe jetzt PyGObject und PyCairo installiert. Mein Skript sieht so aus:

Code: Alles auswählen

#!/usr/local/bin/python
# example base.py

import pygtk
import gtk

class Base:
	def __init__(self):
		self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
		self.window.show()

	def main(self):
		gtk.main()

print __name__
if __name__ == "__main__":
	base = Base()
	base.main()
Bei der Ausführung erhalte ich folgende Fehlermeldung:
Traceback (most recent call last):
File "E:\Eigene Dateien\Programme\test.py", line 5, in <module>
import gtk
File "C:\Python25\lib\site-packages\gtk-2.0\gtk\__init__.py", line 48, in <module>
from gtk import _gtk
ImportError: DLL load failed: Die angegebene Prozedur wurde nicht gefunden.


Die anderen Posts in diesem Thread konnten mir da auch nicht viel weiterhelfen. Wie gesagt, habe ich bereits ein Downgrade auf 2.8 gemacht.

Gruß

DHK

Verfasst: Montag 19. März 2007, 21:16
von Leonidas
Da stimmt wohl deine PyGTK-Version nicht mit der GTK+-Version überein. Scheint so, als wäre das ABI inkompatibel.

Verfasst: Dienstag 20. März 2007, 13:53
von DHK
Und was könnte man dagegen tun? GTK+ ist doch diese etwa 5 MB große Datei. Und was ist dann PyGTK? Die Windows-Schnittstelle?

Gruß

DHK

Verfasst: Dienstag 20. März 2007, 20:53
von Leonidas
DHK hat geschrieben:Und was könnte man dagegen tun?
Die PyGTK und GTK+ Versionen müssen in den ersten zwei Zahlen übereinstimmten: also PyGTK 2.8.x mit GTK+ 2.8.x, PyGTK 2.10.x mit GTK+ 2.10.x.
DHK hat geschrieben:GTK+ ist doch diese etwa 5 MB große Datei.
Nein. Da du aber nicht genau sagst was das für eine Datei ist, wie sie heißt oder wo du sie her hast. Kann ich dir auch nicht sagen, was diese 5 MB große Datei ist. Kann ja alles mögliche sein, ich habe keine Kristallkugel.
DHK hat geschrieben:Und was ist dann PyGTK? Die Windows-Schnittstelle?
Die Python-Schnittstelle. Denn "normalerweise " programmiert man GTK-Programme in C, also braucht man einen Wrapper - PyGTK.