ImportError: No module named '_tkinter'/ Raspberry

Fragen zu Tkinter.
Marillus
User
Beiträge: 11
Registriert: Montag 22. Dezember 2014, 21:36

Hallo,
ich habe ein Problem mit folgender Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "GUI_communications.py", line 1, in <module>
    import tkinter
  File "/usr/local/lib/python3.4/tkinter/__init__.py", line 38, in <module>
    import _tkinter # If this fails your Python may not be configured for Tk
ImportError: No module named '_tkinter'
Das Programm läuft wunderbar auf meinem Laptop. Aber auf dem Raspberry nicht.

tkinter ist auf dem aktuellstem stand und upgedatet. Python ist auf 3.4 aktuell.
Was fehlt dem Raspberry was mein Ubuntu bereits hat?
BlackJack

@Marillus: Das sieht nach einem selbst kompiliertem Python aus bei dem vor dem kompilieren die Tk-Entwicklungspakete nicht installiert waren.
Marillus
User
Beiträge: 11
Registriert: Montag 22. Dezember 2014, 21:36

BlackJack hat geschrieben:@Marillus: Das sieht nach einem selbst kompiliertem Python aus bei dem vor dem kompilieren die Tk-Entwicklungspakete nicht installiert waren.
Was bedeutet das konkret?
Auf dem Raspberry waren jeweils tkinter und python vorinstalliert, bevor ich das programm ausgeführt habe.

Interessanterweise habe ich exakt die selbe Fehlermeldung beim Android über IDLE3 auf meinem Handy und auf meinem anderen Raspberry Rechner. Da muss Grundlegend was fehlen.

Was kann ich dann machen um das Problem in den Griff zu bekommen?
BlackJack

@Marillus: Ob da Python und tkinter vorinstalliert waren ist völlig egal wenn Du ein selbst kompiliertes Python ausführst. Dem sind andere Python-Installationen wurst und auch Module/Packages die für andere Python-Installationen installiert wurden.

Wenn man Programme selber kompiliert und die irgendwelche externen C-Bibliotheken nutzen, dann muss man deren Entwicklungspakete vorher installieren. Die haben bei Debian/Ubuntu in der Regel den Namenszusatz `-dev`. Also in diesem Fall brauchst Du mindestens das `tk-dev`-Paket für die Tk-Version die installiert ist und verwendet werden soll.

Nach dem kompilieren von Python wird übrigens soweit ich mich erinnere ausgegeben welche Module alle *nicht* installiert werden weil Abhängigkeiten fehlen/fehlten. Wenn Dir das mit den Entwicklerpaketen neu ist, dann gibt es sehr wahrscheinlich noch andere Module die nicht vorhanden sind. So aus dem Kopf fallen mir noch SSL-Verschlüsselung und LZMA-Kompression ein die externe Bibliotheken verwenden.
Marillus
User
Beiträge: 11
Registriert: Montag 22. Dezember 2014, 21:36

BlackJack hat geschrieben:@Marillus: Ob da Python und tkinter vorinstalliert waren ist völlig egal wenn Du ein selbst kompiliertes Python ausführst. Dem sind andere Python-Installationen wurst und auch Module/Packages die für andere Python-Installationen installiert wurden.

Wenn man Programme selber kompiliert und die irgendwelche externen C-Bibliotheken nutzen, dann muss man deren Entwicklungspakete vorher installieren. Die haben bei Debian/Ubuntu in der Regel den Namenszusatz `-dev`. Also in diesem Fall brauchst Du mindestens das `tk-dev`-Paket für die Tk-Version die installiert ist und verwendet werden soll.

Nach dem kompilieren von Python wird übrigens soweit ich mich erinnere ausgegeben welche Module alle *nicht* installiert werden weil Abhängigkeiten fehlen/fehlten. Wenn Dir das mit den Entwicklerpaketen neu ist, dann gibt es sehr wahrscheinlich noch andere Module die nicht vorhanden sind. So aus dem Kopf fallen mir noch SSL-Verschlüsselung und LZMA-Kompression ein die externe Bibliotheken verwenden.
Ok, danke für die Hilfe. Ich schau mal welche Pakete fehlen und installiere die auf dem Raspberry nach.
Marillus
User
Beiträge: 11
Registriert: Montag 22. Dezember 2014, 21:36

Problem gelöst: Das Problem war, dass ich .png Bilddateien verwendet habe. Das Programm wird ausgeführt wenn ich die Bilddateibefehle auskommentiere.
Nach dem ich die Bilddateien in .gif gewandelt hatte (und natürlich im Programm angepasst) wurde mein Programm ordnungsgemäß ausgeführt.

Danke
BlackJack

@Marillus: Das war ganz sicher nicht das Problem.
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Kann ich vermuten dass andere Tkinter Programme normal functionieren mit Python3 auf deinem Raspberry Pi?
Atomkraftwerkaktienbesitzer
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Bin mal ins Elektrolabor gegangen um mit einem der Raspberry Pi Computer zu spielen. Habe versuch mit IDLE3 einem Tkinter Program eine .png Bilddatei zu fuettern, und habe dabei diese Fehlernachricht erhalten:

Traceback (most recent call last):
File "/home/pi/rpi_python/tk/Tk_Image_persist1.py", line 27, in <module>
image1 = tk.PhotoImage(file='Farm.png')
File "/usr/lib/python3.2/tkinter/__init__.py", line 3255, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
File "/usr/lib/python3.2/tkinter/__init__.py", line 3211, in __init__
self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't recognize data in image file "Farm.png"

Ziemlich deutlich.
Atomkraftwerkaktienbesitzer
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Ene Uran: Tkinter hat sich zwischen Python2 und Python3 in dieser Hinsicht nicht weiterentwickelt, es kann ohne Zusatzmodule nur gif und ppm laden. Du mußt zusätzlich Pillow installieren, was bei Deiner Python2-Installation wohl der Fall war.
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Versuch mal:
sudo apt-get install python3-tk
Atomkraftwerkaktienbesitzer
BlackJack

@Ene Uran: An wen richtet sich das und hast Du dieses Thema komplett durchgelesen und verstanden?
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Der Raspberry Pi kommt normalerweise (Nov 2014) mit Python32 installiert.
Die Fehlermeldung unseres Freundes Marillus ist anders (Python34) als meine (Python32) wenn man aus Versehen ein .png Bild benuetzt.

Ein glueckliches und warmes Neues Jahr!
Atomkraftwerkaktienbesitzer
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Ene Uran: Deine Fehlermeldung ist ja auch eine, die kommt, wenn man versucht Bilder zu laden, dessen Format tkInter nicht versteht. Das ist die selbe, ob man jetzt Python3.2 oder Python3.4 oder irgendeine andere Version benutzt.
Wenn in der ersten Zeile beim ersten Import ein Fehler auftritt, dann ist das sicher keiner, der irgendwas mit Bildern zu tun hat.

Und ich hätte gerne einen kalten Winter.
BlackJack

@Ene Uran: Die Fehlermeldung von Marillus ist nicht nur von einem Python 3.4 sondern von einem *selbst kompilierten* 3.4 das unter ``/usr/local/…`` liegt. Da kann man ganz sicher kein Modul/Package per ``apt-get`` aus den normalen Distributionsquellen für installieren. Und ein *fehlendes* `_tkinter`-Modul macht sich auch nicht erst bemerkbar wenn man versucht ein Bild zu laden sondern schon wenn man versucht die Funktion zum Laden des Bildes zu importieren. Ob und welche Formate die nichtvorhandene Bibliothek dann unterstützt, oder nicht, ist an der Stelle auch erst einmal egal.
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Nach Aussagen von unserem Freund Marillus:
"Das Problem war, dass ich .png Bilddateien verwendet habe."

Wieso dann diese Meldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "GUI_communications.py", line 1, in <module>
    import tkinter
  File "/usr/local/lib/python3.4/tkinter/__init__.py", line 38, in <module>
    import _tkinter # If this fails your Python may not be configured for Tk
ImportError: No module named '_tkinter'
 
Atomkraftwerkaktienbesitzer
BlackJack

@Ene Uran: Weil das Problem am Anfang halt ein anderes war als das letzte was er gelöst hat bevor es funktionierte. Soll vorkommen das Leute mehr als ein Problem haben, ein Problem erst sichtbar wird wenn ein anderes gelöst ist, und am Ende alle Probleme gelöst sind. :-)
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Danke!
Was war nun mal das andere Problem?
Atomkraftwerkaktienbesitzer
BlackJack

@Ene Uran: Das andere Problem war ein nicht-unterstütztes Bildformat, was ja aber auch schon gelöst war nachdem der OP die Bilder in GIFs umgewandelt hat. Du solltest die Beiträge vielleicht wirklich mal lesen. ;-)
Marillus
User
Beiträge: 11
Registriert: Montag 22. Dezember 2014, 21:36

BlackJack hat geschrieben:@Ene Uran: Die Fehlermeldung von Marillus ist nicht nur von einem Python 3.4 sondern von einem *selbst kompilierten* 3.4 das unter ``/usr/local/…`` liegt. Da kann man ganz sicher kein Modul/Package per ``apt-get`` aus den normalen Distributionsquellen für installieren. Und ein *fehlendes* `_tkinter`-Modul macht sich auch nicht erst bemerkbar wenn man versucht ein Bild zu laden sondern schon wenn man versucht die Funktion zum Laden des Bildes zu importieren. Ob und welche Formate die nichtvorhandene Bibliothek dann unterstützt, oder nicht, ist an der Stelle auch erst einmal egal.
Hi, definitiv hat das mein Problem gelöst! Sonst würde das jetzt ja nicht funktionieren ;) Ich habe ja sonst nichts geändert gehabt an meinem Programm.
Allerdings muss ich noch erwähnen, dass der Raspberry vorher einige Fehlermeldungen vorher ausgegeben hatte, dass ihm Pakete fehlen. Ich habe diese dann installiert gehabt. Vielleicht fehlen dir welche? Ich kann das leider nicht reproduzieren.

Die Fehlermeldung von dir sagt doch aber auch, dass er keine Daten in dem Bild findet? Vielleicht ist die Bilddatei fehlerhaft oder beschädigt?
Antworten