2014-10-01 2 views
1

Следуя инструкциям в this SO answer, я создал пакет Python с подпакетами в виде подпапок, каждый из которых содержит файл __init__.py (который полностью пуст).ImportError: Нет модуля с именем '' при импорте моего собственного подпакета

top_module 
    __init__.py 
    module_a.py 
     sub_module 
      __init__.py 
      module_c.py 

я могу импортировать модуль верхнего уровня, но при попытке импортировать результаты суб-модуль в ImportError:

>>> import top_module 
>>> import top_module.sub_module 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named sub_module 

В IPython я могу автозаполнение top_model. показать мне module_a.py, но не sub_module.

следовали инструкциям в this SO answer, но я просто получаю:

>>> top_module.__file__ 
'top_module.pyc' 

, который не очень полезно. Интересно, что __package__ дает мне:

>>> print top_module.__package__ 
None 

Я могу это сделать:

>>> import top_module 
>>> import sub_module.module_c 

Так почему бы не import top_module.sub_module.module_c?

+0

В каком каталоге вы работаете, когда выполняете эти команды? –

+0

Хороший вопрос. Я либо: а) в командной строке, в каталоге top_module или b) в Spyder с каталогом top_module, добавленным в инструмент IDE «PYTHONPATH manager». – LondonRob

ответ

2

Я работал, что моя проблема была (и это довольно тупой ошибки, я боюсь.)

я мой PYTHONPATH установлен

/path/to/top_module 

и

import module_a 

который, разумеется, работал. Но попытка сделать

import top_module.submodule 

не работает, потому что PYTHONPATH не «знать» о top_module, это было уже вtop_module.

1

Попробуйте from sub_module.module_c import *

+0

Это работает. Что, черт возьми, происходит? Разве я не могу сделать 'import top_module.sub_module'? – LondonRob

+0

@LondonRob Я бы подумал, что вы могли бы. Импортная система Python всегда казалась ... неуклюжей для меня. – Undo

+0

Спасибо @Undo. Я изменил свой вопрос, чтобы отразить эту новую информацию. – LondonRob

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