2016-02-08 4 views
0

У меня есть структура папок, как этотИмпорт модулей из вложенной папки

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() 

Ошибка :

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

ImportError: No module named done.test1 

Я не могу импортировать модули из вложенной папки. Есть какой-либо способ сделать это.

Edit:

После ответа Сальва, я изменил свою структуру как этот

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

та же ошибка брошено теперь.

ответ

1

Вам нужен файл __init__.py в каждой директории, которую вы хотите, чтобы рассмотреть пакет так что вам нужно в оба каталоги:

. 
├── check.py 
└── done 
    ├── __init__.py 
    └── test1 
     └── __init__.py <-- this files contains your Tries class 
+0

У вас есть * .pyc-файлы в вашей иерархии? Попробуйте удалить их. – Salva

1

В следующей структуре файла/папки код просто работает здесь:

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

Когда я запустил check.py, он печатает Test. Однако я не использовал __init__.py. То, что вы описали как __init__.py, я сделал test1.py.

+0

Я тестировал его в Spyder, может быть, он заботится о некоторых вещах в фоновом режиме? – Lam

1

Попытки импортировать пакет done первого

import done 

Если он не работает, вероятно, вы работаете сценарий из другой папки, чем вы указали (в данном случае main_folder)

Из бревен кажется, как вы используете IPython, в этом случае попробуйте добавить свою папку в качестве пути к модулю

import sys 
sys.path.append('path/to/your/main_folder') 
import done 
Смежные вопросы