Ответ 1
ImportError: No module named foo
на самом деле означает, что модуль foo.py
или пакет foo/__init__.py
не может быть найден ни в одном из каталогов в пути поиска (sys.path
list).
Так как sys.path
обычно содержит .
(текущий каталог), возможно, это то, что вы имели в виду, находясь в исходном каталоге. Вы находитесь в каталоге верхнего уровня пакета foo
(где находится файл __init__.py
), поэтому, очевидно, вы не можете найти foo/__init__.py
.
Наконец, вы ответили на свой вопрос, более или менее:
try:
from _foo import *
except ImportError:
raise ImportError('<any message you want here>')
В качестве альтернативы вы можете проверить содержимое sys.path
, текущего каталога и, если известно, ожидаемого каталога пакетов и создать четкое и контекстно-зависимое сообщение.
Или добавьте ..
в переменную среды PYTHONPATH
(в Unix), чтобы вы могли запускаться из вашего исходного каталога. Может даже работать в Windows, но я не знаю.