2013-03-04 12 views
7

Ho lottato tutta la notte cercando di risolvere un errore di importazione.Python non può importare nome <class>

Questo è un problema comune, ma nessuna domanda precedente abbastanza risponde il mio problema.

Sto usando PyDev (un plugin Eclipse), e la biblioteca Kivy (una libreria Python)

ho una struttura di file creato in questo modo:

<code> 
    __init__.py 
    main.py 
    engine.py 
    main_menu_widget.py 

"codice" si svolge all'interno di la cartella eclipse "MyProject" ma non è un pacchetto quindi non l'ho incluso.

I file simile a questa:

main.py

# main.py 
from code.engine import Engine 

class MotionApp(App): 
    # Ommited 

engine.py

# engine.py 
from code.main_menu_widget import MainMenuWidget 

class Engine(): 
    # Ommited 

main_menu_widget.py

# main_menu_widget.py 
from code.engine import Engine 

class MainMenuWidget(Screen): 
    pass 

L'errore che ricevo, in dettaglio completo, è:

Traceback (most recent call last): 
    File "C:\MyProject\code\main.py", line 8, in <module> 
    from code.engine import Engine 
    File "C:\MyProject\code\engine.py", line 6, in <module> 
    from code.main_menu_widget import MainMenuWidget 
    File "C:\MyProject\code\main_menu_widget.py", line 3, in <module> 
    from code.engine import Engine 

Qualche idea di cosa ho fatto di sbagliato qui? Ho appena rinominato la mia intera struttura di cartelle perché ho rovinato questa struttura del modulo così male, ma penso di essere vicino a come dovrebbe apparire ....

+3

Possibile duplicato di [ImportError: impossibile importare il nome X] (http://stackoverflow.com/questions/9252543/importerror-cannot-import-name-x) –

risposta

5

è nella stessa cartella, usare un nome di pacchetto relativo (è una buona pratica di farlo in ogni caso):

from .engine import Engine 
+0

non code.engine? Non avrebbe senso, dal momento che è tutto all'interno di un pacchetto "codice" di root? – MintyAnt

+0

Generalmente è consigliabile utilizzare le importazioni relative durante l'importazione di oggetti dal proprio progetto. –

+1

Abbastanza giusto.Ho appena provato, senza fortuna, genera lo stesso errore, stessa linea. "impossibile importare il nome del motore" – MintyAnt

1

tua directory codice è un pacchetto. Assicurati che la directory sopra di esso, ovvero C:\MyProject a giudicare dai tuoi messaggi di errore, sia nel tuo PYTHONPATH.

Aprire il menu di scelta rapida selezionando il progetto e facendo clic con il pulsante destro del mouse, quindi selezionare Proprietà. Selezionare PyDev - PYTHONPATH e da lì il scheda Cartelle di origine. Verificare che la directory di cui sopra sia presente; se non è premere cartella di origine Add, selezionarla dal dialogo e premere OK .

8

Sembra esserci un'importazione circolare. da engine.py si sta importando main_menu_widget mentre da main_menu_widget si sta importando engine.

Questo è chiaramente un import circolare che non è consentita dal pitone.

+1

Yay Python 2 ti dice il problema – mafrosis

Problemi correlati