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

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?
[b]Ordnung ist das Chaos, an das man sich gewöhnt hat
[i]Der Weg ist das Ziel[/b][/i]
[url=http://bluetiger.bauchlandung.org/]bluetiger.bauchlandung.org[/url]
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

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

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).
[b]Ordnung ist das Chaos, an das man sich gewöhnt hat
[i]Der Weg ist das Ziel[/b][/i]
[url=http://bluetiger.bauchlandung.org/]bluetiger.bauchlandung.org[/url]
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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

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:

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? :?:
[b]Ordnung ist das Chaos, an das man sich gewöhnt hat
[i]Der Weg ist das Ziel[/b][/i]
[url=http://bluetiger.bauchlandung.org/]bluetiger.bauchlandung.org[/url]
Blue-Tiger
User
Beiträge: 11
Registriert: Samstag 2. April 2005, 21:45
Kontaktdaten:

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
[b]Ordnung ist das Chaos, an das man sich gewöhnt hat
[i]Der Weg ist das Ziel[/b][/i]
[url=http://bluetiger.bauchlandung.org/]bluetiger.bauchlandung.org[/url]
Blue-Tiger
User
Beiträge: 11
Registriert: Samstag 2. April 2005, 21:45
Kontaktdaten:

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 ;)
[b]Ordnung ist das Chaos, an das man sich gewöhnt hat
[i]Der Weg ist das Ziel[/b][/i]
[url=http://bluetiger.bauchlandung.org/]bluetiger.bauchlandung.org[/url]
Antworten