2012-10-04 7 views
0

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

В этом пакете у меня есть 4 подмодулей в (отдельные файлы) и файл инициализации, поэтому пакет содержит следующие файлы:

  • __init__.py
  • moduleA.py
  • moduleB.py
  • moduleC.py
  • moduleD.py

Модуль B-D автономный, они не импортируют какой-либо другой локальный модуль. Модуль A импортирует модуль B-D.

Теперь у меня есть сценарий, который хочет импортировать packageA, init.py до сих пор пуст.

import packageA 

работает без проблем. Но moduleA не доступен из этого импорта. Если я хочу использовать его через packageA.moduleA он поднимает эту ошибку:

AttributeError: 'module' object has no attribute 

Следующая также работает без проблем:

from packageA import moduleB 
from packageA import moduleC 
from packageA import moduleD 

И следующий ИМПОРТ вызывает ImportError:

from packageA import moduleA 

вызывает эту ошибку:

Traceback (most recent call last): 
File "run.py", line 19, in <module> 
from packageA import moduleA 
ImportError: cannot import name moduleA 

Я думал, что, возможно, я делаю неправильно в модуле А, но даже если moduleA пуст, импорт вызывает ту же ошибку. Похоже, что этот модуль не может быть каким-то образом импортирован. Как это возможно?

У меня есть тестовые файлы для отдельных модулей для всех модулей python, и да, модульA работает правильно, без ошибок.

+1

, если вы находитесь внутри, пакет, вам нужно сделать 'импорт packageB' – Surya

+0

вы можете поместить правильный порядок, в котором импорт делается и полная трассировка. –

+0

после импорта пакетаA, можете ли вы использовать moduleA с помощью packageA.moduleA –

ответ

2

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

import packageA 
print packageA.__file__ 

Кроме того, проверьте, был ли изменен путь поиска модуля пакета. Обычно это список, который содержит один элемент, путь к каталогу пакета:

print packageA.__path__ 
+0

В этой связи возникает ошибка: Traceback (самый последний вызов последнего): Файл "run.py", строка 18, в печати (пакетОтель .__ path__) AttributeError: 'модуль' объект не имеет атрибута '__path__' Но доступ к модулю Б через packageA.moduleB отлично работает – akohout

+0

@raveN Попробуйте отредактированный ответ. Похоже, что packageA - это не пакет, а модуль, который импортирует модульB. –

+1

Да, ты был прав. Он не импортировал мой пакет, он импортировал другой пакет. «__file__» указал на уже установленную версию моего пакета, но он был прежним без отсутствующего модуля:/Спасибо большое! – akohout

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