Django ImportError

14,895

Solution 1

It turns out that it was a circular import error. models.py was importing a.py and a.py was importing models.py.

Breaking this circle solved the import issues, but now it is time to figure out how to do lazy evaluation in Python :-)

Solution 2

Put empty file named: __init__.py inside /submodule1 so Python can parse it as module. It should help. The same in /appname - there should be also __init__.py file

Share:
14,895
Andrew Lee
Author by

Andrew Lee

Updated on July 19, 2022

Comments

  • Andrew Lee
    Andrew Lee almost 2 years

    I created my own Django application with directory structure

    /appname
        __init__.py
        models.py
        /submodule1
            __init__.py
            a.py
    

    Inside a.py I have the following import

    from ..models import Something
    

    This works okay if I have /appname inside my /djangoproject folder, but when I install the app to Python's site-packages (via setup.py which I created), all hell breaks loose and a.py can no longer import Something, with the following error:

    ImportError: cannot import name Something
    

    Here is the setup.py:

    from distutils.core import setup
    
    setup(name='appname',
          version='0.1',
          packages=['appname', 'appname.contrib'],
    )
    
  • Andrew Lee
    Andrew Lee over 12 years
    Yes I had __init__.py in both /submodule1 and / but it is still giving me the ImportError.
  • Harry
    Harry over 10 years
    I've run into this myself, I just put the import statement inside the function that required a.py but that seems icky. What was your solution?