6

I have a folder structure like this

main_folder
|
|--done
|  |
|  |--test1
|  |--__init__.py
|
|---check.py

__init__.py:

class Tries(object):
    def __init__(self):
        print "Test"

check.py:

from done.test1 import Tries
Tries()

Error:

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-8-10953298e1df> in <module>()
----> 1 from done.test1 import Tries

ImportError: No module named done.test1 

I am not able to import modules from the nested folder. Is there any way to do this.

Edit:

After Salva's answer I changed my structure like this

.
├── check.py
|--__init__.py(no content)
└── done
    ├── __init__.py(no content)
    └── test1
        └── __init__.py <-- this files contains your Tries class

Same error is thrown now also.

The6thSense
  • 8,103
  • 8
  • 31
  • 65

3 Answers3

8

You need a file __init__.py in each directory you want it to be considered a package so you need it in both directories:

.
├── check.py
└── done
    ├── __init__.py
    └── test1
        └── __init__.py <-- this files contains your Tries class
Salva
  • 6,507
  • 1
  • 26
  • 25
1

In the following file/folder structure your code just works here:

.
├── check.py
└── done
    └── test1.py

When I run check.py it prints Test. I didn't use __init__.py though. What you described as __init__.py I made test1.py.

Lam
  • 681
  • 1
  • 9
  • 17
1

Try to import package done first

import done

If it doesn't work, probably you are running script from different folder than you specified (in this case main_folder)

From logs it seems like you are using IPython, in this case try to add your folder as module path

import sys
sys.path.append('path/to/your/main_folder')
import done
ikhtiyor
  • 504
  • 5
  • 15