[ImportError] Unter-Module die sich gegenseitig importieren

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.
Blue-Tiger
User
Beiträge: 11
Registriert: Samstag 2. April 2005, 21:45
Kontaktdaten:

[ImportError] Unter-Module die sich gegenseitig importieren

Beitragvon Blue-Tiger » Mittwoch 16. August 2006, 10:57

Hi there! Ich hab ein kleines Problem, ich hoff ihr koennt mir vielleicht weiterhelfen. Google spuckt nicht wirklich was aus (bzw. viel zu viel), wenn ich da nach "ImportError" such.

Anyway, folgendes Problem:

In meinem Programm (searchDoubles) gibt es mehrere Packages: 'gui' (mit dem Modul 'TkGui.py'), 'filetypes' und 'util' (mit den Modulen 'main.py' und 'SimilarityList.py').
Ausserdem gibts im Hauptverzeichnis ein Hauptscript, "searchDoubles.py".

aus searchDoubles.py:

Code: Alles auswählen

from gui import TkGui as Gui
from util import SimilarityList
from filetypes import *



aus gui/TkGui.py:

Code: Alles auswählen


import tkFileDialog
from Tix import *
from searchDoubles.src.util import main


Beim Ausfuehren von searchDoubles.py erhalte ich immer folgenden Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\tmp\searchDoubles\src\searchDoubles.py", line 34, in ?
    from gui import TkGui as Gui
  File "C:\tmp\searchDoubles\src\gui\TkGui.py", line 4, in ?
    from searchDoubles.src.util import main
  File "C:\tmp\searchDoubles\src\searchDoubles.py", line 34, in ?
    from gui import TkGui as Gui
ImportError: cannot import name TkGui


Kann mir irgendwer weiterhelfen?
Ordnung ist das Chaos, an das man sich gewöhnt hat
Der Weg ist das Ziel

bluetiger.bauchlandung.org
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 16. August 2006, 11:23

Kannst du denn überhaupt ein "from gui import TkGui as Gui" machen???

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Blue-Tiger
User
Beiträge: 11
Registriert: Samstag 2. April 2005, 21:45
Kontaktdaten:

Beitragvon Blue-Tiger » Mittwoch 16. August 2006, 12:18

ja, denn wenn ich in gui/TkGui.py das "from searchDoubles.src.util import main" auskommentiere, funktioniert der Code: die GUI wird korrekt initialisiert und startet, nur bekomm ich spaeter logisch Fehler der Art "NameError: global name 'main' is not defined" innerhalb der GUI-Eventhandler (die eben den Zugriff auf das Modul util.main benoetigen).
Ordnung ist das Chaos, an das man sich gewöhnt hat
Der Weg ist das Ziel


bluetiger.bauchlandung.org
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Mittwoch 16. August 2006, 12:23

Im Prinzip kannst du das Problem vermeiden, indem du einen der zirkulären Importe in die Methode(n) verschiebst, in der die Importe benötigt werden.

Besser ist es aber, solche zirkulären Abhängigkeiten von vornherein aufzulösen, indem man z.B. ein gemeinsames drittes Modul erstellt.
BlackJack

Beitragvon BlackJack » Mittwoch 16. August 2006, 12:53

So wie es dort steht muss `searchDoubles` auch ein Package sein, sonst dürfte es nicht gehen. Kannst Du mal die komplette Vereichnisstruktur mit Dateien posten?
Blue-Tiger
User
Beiträge: 11
Registriert: Samstag 2. April 2005, 21:45
Kontaktdaten:

Beitragvon Blue-Tiger » Mittwoch 16. August 2006, 12:54

birkenfeld hat geschrieben:Im Prinzip kannst du das Problem vermeiden, indem du einen der zirkulären Importe in die Methode(n) verschiebst, in der die Importe benötigt werden.

Besser ist es aber, solche zirkulären Abhängigkeiten von vornherein aufzulösen, indem man z.B. ein gemeinsames drittes Modul erstellt.


Was fuer zirkulaere Importe? :?:
Ordnung ist das Chaos, an das man sich gewöhnt hat
Der Weg ist das Ziel


bluetiger.bauchlandung.org
Blue-Tiger
User
Beiträge: 11
Registriert: Samstag 2. April 2005, 21:45
Kontaktdaten:

Beitragvon Blue-Tiger » Mittwoch 16. August 2006, 13:02

BlackJack hat geschrieben:So wie es dort steht muss `searchDoubles` auch ein Package sein, sonst dürfte es nicht gehen. Kannst Du mal die komplette Vereichnisstruktur mit Dateien posten?


"als ich in gui/TkGui.py noch stehen hatte "from src.util import functions" bekam ich folgenden Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\tmp\searchDoubles\src\searchDoubles.py", line 34, in ?
    from gui import TkGui as Gui
  File "C:\tmp\searchDoubles\src\gui\TkGui.py", line 4, in ?
    from src.util import functions
ImportError: No module named src.util


Deswegen hab ichs mit "searchDouble.src.util" versucht.
"main.py" hab ich mittlerweile uebrigens in "functions.py" umbenannt, nur damit ihr euch nicht wundert.


Hier die Verzeichnisstruktur:

Code: Alles auswählen

[searchDoubles]
  license.txt
  searchDoubles.py

  [filetypes]
     File.py
     Mp3File.py
     OggFile.py
     __init__.py
     [helper]
         id3reader.py
         __init__.py

   [gui]
      TkGui.py
      wxGui.py
      __init__.py

   [util]
     functions.py
      SimilarityList.py
      __init__.py
Ordnung ist das Chaos, an das man sich gewöhnt hat
Der Weg ist das Ziel


bluetiger.bauchlandung.org
Blue-Tiger
User
Beiträge: 11
Registriert: Samstag 2. April 2005, 21:45
Kontaktdaten:

Beitragvon Blue-Tiger » Mittwoch 16. August 2006, 13:11

Ok, Problem erledigt, ich haette "from util include functions" schreiben sollen =) :oops:

Danke an alle fuer ihre Posts & die Hilfsbereitschaft, ich stell mich jetzt in die Ecke und schaem mich ;)
Ordnung ist das Chaos, an das man sich gewöhnt hat
Der Weg ist das Ziel


bluetiger.bauchlandung.org

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]