2013-07-31 5 views
1

Есть много вопросов с небольшими вариациями этой проблемы в SO. Ни один из ответов, которые я видел, не решает мою проблему, поэтому я задаю новый вопрос.ImportError: Нет модуля с именем _____

У меня есть эта структура папок:

 
/myapp/ 
    \__init__.py 
    modu1.py 
    modu2.py 

__init__.pyпусто

modu1.py

class TestMod1Class(): 
    def msg(self): 
     print "Hello World!" 

modu2.py

import myapp.modu1 

obj = myapp.modu1.TestMod1Class() 
obj.msg() 

Если из каталога/MyApp/Я бегу python modu2.py я получаю:

Traceback (most recent call last): 
    File "modu2.py", line 1, in <module> 
    import myapp.modu1 
ImportError: No module named myapp.modu1 



Что я делаю неправильно? Я читал the docs и все еще не могу понять.

ответ

2

If from the directory /myapp/ I run python modu2.py i get

Если вы запускаете модуль напрямую, он не запускается как часть пакета, к которому он может принадлежать. При этом импорт myapp.modu1 будет искать myapp/myapp/modu1.py, что явно не там, где оно есть.

Если вы хотите, чтобы пакет myapp работал, вам необходимо запустить выполнение из корневого каталога. Так добавить main.py рядом с папкой myapp:

/main.py 
/myapp 
    /__init__.py 
    /modu1.py 
    /modu2.py 

И оттуда, вы можете сделать:

import myapp.modu2 

И тогда вы должны начать с python main.py.

6

Вы уже находитесь в пределах myapp, находясь в папке myapp. Поэтому вам не нужно использовать синтаксис import myapp.modu1 и вместо этого следует использовать import modu1.

Например:

import modu1 

obj = modu1.TestMod1Class() 
obj.msg() # output: Hello World! 

Примечание: Я проверил в Python 3, потому что у меня нет 2 на моей машине, но это должно быть то же самое (я редактировать modu1 использовать новый синтаксис print) ,

Смежные вопросы