Editorproblem 'module' object is not callable

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
RedSharky
User
Beiträge: 99
Registriert: Donnerstag 13. April 2006, 15:38

Samstag 29. November 2008, 12:54

Hallo!

Ich bräuchte mal euren Rat, denn ich habe leider Probleme mit meinen Python Editoren.

Ein frisches XP und Python 2.5.2 ist installiert.

Exemplarisch habe ich mal dieses Skript ausprobiert:

[wiki]Threading Beispiel1[/wiki]?highlight=(threading)

In Idle und Blender funktioniert es einwandfrei.
Aber unter Eclipse und SPE gibt es folgende Fehlermeldung:

... line 155, in main
q = Queue.Queue()
TypeError: 'module' object is not callable


Was bedeutet das? Etwa ein Pfad Problem? Und wieso verhalten sich die Editoren unterschiedlich?

Danke schon mal.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Samstag 29. November 2008, 13:53

RedSharky hat geschrieben:In Idle und Blender funktioniert es einwandfrei.
Aber unter Eclipse und SPE gibt es folgende Fehlermeldung:
Oho, da gibt es was, das in IDLE läuft und in anderen Editoren nicht. :)

Das Problem liegt offenbar in der Namensgleichheit von Modulname und Klassenname. Moniert wird hier, dass das Modul Queue nicht callable ist (stimmt ja auch), aber gemeint ist natürlich die Instanzbildung.

Versuch mal folgendes:

Code: Alles auswählen

import Queue as QueueModul
und dann entsprechend

Code: Alles auswählen

q = QueueModul.Queue()
BlackJack

Samstag 29. November 2008, 17:46

@numerix: Das ist Quatsch, man kann Problemlos ein Objekt in einem Modul haben, wo beide den gleichen Namen haben. Sonst würde das ja sonst auch nicht laufen und vor allem die *Standardbibliothek* nicht so etwas enthalten.

Das sieht eher so aus, als wenn bei einem Start mit SPE ein Package mit dem Namen `Queue`, das ein Modul mit dem gleichen Namen enthält vor dem `Queue`-Modul der Standardbibliothek im Pfad liegt.

@RedSharky: Also am besten mal vor der Zeile 155 folgendes Einfügen und schauen wo der Übeltäter her kommt:

Code: Alles auswählen

print repr(Queue), Queue.__file__
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Samstag 29. November 2008, 17:55

BlackJack hat geschrieben:@numerix: Das ist Quatsch, man kann Problemlos ein Objekt in einem Modul haben, wo beide den gleichen Namen haben. Sonst würde das ja sonst auch nicht laufen und vor allem die *Standardbibliothek* nicht so etwas enthalten.
Mir ist völlig klar, dass das normalerweise funktioniert. Meine Vermutung war ja auch nicht, dass das grundsätzlich nicht geht oder problematisch ist, sondern dass es sein könnte, dass die genannten IDEs mit der Namensgleichheit ein Problem haben - was dann ein Bug in der IDE wäre, kein Bug in Python!

Kann natürlich trotzdem sein, dass ich mit meiner Vermutung falsch liege.
Falls du mit deiner richtig liegst, dann müsste mein Lösungsvorschlag aber doch auch Abhilfe schaffen.

Edit: Nee, letzter Satz stimmt nicht.
RedSharky
User
Beiträge: 99
Registriert: Donnerstag 13. April 2006, 15:38

Sonntag 30. November 2008, 09:22

Also den Tipp von numerix hab ich ausprobiert. Leider keine Änderung.

Wenn ich
print repr(Queue), Queue.__file__
einfüge, dann gibt das folgende Melung:

Code: Alles auswählen

<module 'Queue' from 'D:\programing\Python\Queue.pyc'> D:\programing\Python\Queu
e.pyc
Traceback (most recent call last):
  File "Threading Beispiel 1.py", line 177, in <module>
    main()
  File "Threading Beispiel 1.py", line 156, in main
    q = Queue.Queue()
TypeError: 'module' object is not callable
Die erste Zeile bedeutet doch, soweit ich das verstehe, dass Queue nicht in der Pythoninstallation gesucht wird, sondern im aktuellen Skripteverzeichnis. Das sollte doch der Fehler sein. Fehlt da der Pythonpath? Oder wo soll ich da was einstellen?
RedSharky
User
Beiträge: 99
Registriert: Donnerstag 13. April 2006, 15:38

Sonntag 30. November 2008, 09:54

Habe eben nocht mal Blender getestet. Dort wird das Modul importiert:

<module 'Queue' from 'C:\Python25\Lib\Queue.py'> C:\Python25\Lib\Queue.py

Und es funktioniert.

SPE scheint dagegen nicht in diesem Standardverzeichnis zu suchen. Außerdem erwartet es wohl die pyc-Version. Am Python path kann es eigentlich nicht liegen.

import sys
print sys.path

ergibt folgendes (unter SPE):

['D:\\programing\\Python', 'C:\\PYTHON25', 'C:\\WINDOWS\\system32\\python25.zip'
, 'C:\\Python25\\DLLs', 'C:\\Python25\\lib', 'C:\\Python25\\lib\\plat-win', 'C:\
\Python25\\lib\\lib-tk', 'C:\\Python25\\lib\\site-packages', 'C:\\Python25\\lib\
\site-packages\\wx-2.8-msw-unicode']
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Sonntag 30. November 2008, 10:25

Wenn du wissen willst, in welcher Reihenfolge welche Verzeichnisse nach Modul-Dateien durchsucht werden, probiere mal `import sys; print sys.path` auch in Blender aus.

Das SPE `pyc`-Dateien bevorzugt, halte ich für eine falsche Theorie.

Ich würde ja sagen, Blender interessiert sich nicht für dein Verzeichnis `D:\programming\python`, andere Editoren - möglicherweise, weil dieses Verzeichnis in PYTHONPATH steht - schon. Warum ist diese Datei dort? Das ist so oder so ein Konflikt mit der Standardbibliothek.

Man kann leider mit eigenen Modul-Namen recht häufig Pech haben und irgendwelche Systemmodule damit verdecken, die man vielleicht gerade nicht erinnert oder einfach nicht gekannt hat.

Stefan
RedSharky
User
Beiträge: 99
Registriert: Donnerstag 13. April 2006, 15:38

Sonntag 30. November 2008, 10:43

Unter Blender sieht das dann so aus:

['C:\\Programme\\Blender\\blender-2.48a-windows', 'C:\\PYTHON25', 'C:\\Programme
\\Blender\\blender-2.48a-windows\\python25.zip', 'C:\\Python25\\Lib', 'C:\\Pytho
n25\\DLLs', 'C:\\Python25\\Lib\\lib-tk', 'C:\\Programme\\Blender\\blender-2.48a-
windows', 'C:\\Python25\\lib\\site-packages', 'C:\\Python25\\lib\\site-packages\
\wx-2.8-msw-unicode', 'C:\\PROGRA~1\\Blender\\BLENDE~1.48A', 'C:\\Programme\\Ble
nder\\blender-2.48a-windows\\.blender\\scripts', 'C:\\Programme\\Blender\\blende
r-2.48a-windows\\.blender\\scripts\\bpymodules']

`D:\programming\python` ist der Ort wo ich meine Beispielpyhtondatei gespeichert habe, also das aktuelle Verzeichnis. Ich dachte, es wäre normal, dass da zuerst gesucht wird. Ist es nicht so, dass zuerst immer alles im aktuellen Verzeichnis gesucht wird und erst anschießend, wenn man dort nicht fündig geworden ist, die restlichen Verzeichnisse/Pfade checkt.

Nur was soll ich nun machen? Wie kann man die Reihenfolge in der die Pfade behandelt werden ändern.

Ich habe gestern ein komplett neues XP aufgesetzt und Python 2.5.2 und auch sonst die aktuellen Versionen installiert. Also ziehmlich standard. Leider ist da trotzdem der Wurm drin.
Ich brauch aber wirklich eine Lösung, da das so keinen Spass macht.

Bin ich denn der Einzige, dem es so geht?

Oder ich nutze Blender als Standardeditor...

Ne, mal im Ernst, wie geht's nun weiter?

Ich bin wirklich an einer Lösung interessiert, da ich Vertrauen in Python brauche. Wenn das Ganze nicht zuverlässig ist und irgendwie manchmal nicht oder doch geht, dann ist mir das zu wenig.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Sonntag 30. November 2008, 10:52

Lösche diese Datei: D:\programing\Python\Queue.pyc
RedSharky hat geschrieben: Ich bin wirklich an einer Lösung interessiert, da ich Vertrauen in Python brauche. Wenn das Ganze nicht zuverlässig ist und irgendwie manchmal nicht oder doch geht, dann ist mir das zu wenig.
Es liegt wirklich nicht an Python selbst, keine Angst ;)
DeJe
User
Beiträge: 39
Registriert: Sonntag 23. November 2008, 19:38

Sonntag 30. November 2008, 11:00

Ist die Source im OT noch "fehlerbehaftet"?
Ich habe das gerade in Eclipse durchlaufen lassen und da bekomme ich keine Fehler, funktioniert einwandfrei.

Ubuntu Hardy, Python 2.5.2, Eclipse+PyDev
RedSharky
User
Beiträge: 99
Registriert: Donnerstag 13. April 2006, 15:38

Montag 1. Dezember 2008, 19:42

audax hat geschrieben:Lösche diese Datei: D:\programing\Python\Queue.pyc

Es liegt wirklich nicht an Python selbst, keine Angst ;)
Oh, das isses! Wie kommt die denn dahin? Mal im Ernst, durch welche Fehlbedienung kann den sowas passieren?

Jedesmal, wenn ich gerade glaube die Python ein wenig verstanden zu haben, dann kommt sie und beißt mir in den Arsch! Das ist fies!

Wiki Beispiel ist ok.


Danke!
Antworten