Python cannot import name <class>
Question: I've been wrestling most of the night trying to solve an import error.

This is a common issue, but no previous question quite answers my issue.

I am using PyDev (an Eclipse plugin), and the library Kivy (a Python library)

I have a file structure set up like this:

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

"code" is held within the eclipse folder "MyProject" but it's not a package so
I didn't include it.

The files look like this:

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
    

The error I recieve, in full detail, is:

    
    
     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
    

Any idea what I did wrong here? I just renamed my entire folder structure
because I screwed up this module structure so bad, but I think i'm close to
how it should look....


Answer: There seems to be a circular import. from `engine.py` you are importing
`main_menu_widget` while from `main_menu_widget`you are importing `engine`.

That is clearly a circular import which is not allowed by python.

