Search code examples
pythonpackagepython-importimporterror

How to fix ModuleNotFoundError: No module named 'parts'


I have the following files structure:

mytests
   models
      parts
        __init__.py
        ...
      __init__.py
      model.py
   test.py

This is the content of __init__.py:

from parts import *
from models import My_transformer

if __name__=='__main__':
    # ...

This is the content of model.py:

from parts.attention import Pre_Net

class My_transformer(tf.keras.Model):
    def __init__(self,config,logger=None):
        super(My_transformer, self).__init__()
        ...

When I run test.py, I get the following error:

/mytests/models/__init__.py in <module>()
----> 1 from parts import *
ModuleNotFoundError: No module named 'parts'

at this line:

from models import My_transformer

How can I fix this error? I run the test.py from Jupyter Notebook.

Update

I have __init__.py inside parts and it looks as follows:

from attention import *

if __name__=='__main__':
    print('ok')

Solution

  • You should have structure and imports like these:

    mytests
       models
          parts
            __init__.py
            attention.py
          __init__.py
          model.py
       test.py
    

    models/parts/__init__.py content:

    from .attention import Pre_Net
    # or from .attention import *
    

    models/parts/attention.py content:

    class Pre_Net:
        pass
    

    models/__init__.py content:

    from .model import *
    

    models/model.py content:

    from models.parts import Pre_Net
    
    class My_transformer(tf.keras.Model):
        def __init__(self,config,logger=None):
            super(My_transformer, self).__init__()
            ...
    

    test.py content:

    from models import My_transformer