Ваша проблема заключается в том, что, запустив mad.py
из каталога module_test
, вы предположили, что Python будет использовать ваш текущий каталог в качестве базы для поиска модуля b
. Для того, чтобы доказать, что он не работает, выполните следующие действия:
Редактировать свой mad.py
скрипт и добавьте следующие строки в самом начало сценария:
import sys
print(sys.path)
exit()
Это будет просто напечатать путь поиска Python использует для поиска модули, которые вы пытаетесь импортировать, а затем выходите.
Откройте терминал, перейдите в папку /module_test
и выполнить следующую команду:
> python lib/mad.py
Теперь вы должны увидеть путь сбрасывали к терминалу. Обратите внимание, что первая запись в списке - это папка 'module_test/lib', а не 'module_test', как вы могли подумать.
Итак, как вы решаете проблему?
Прост: вам просто нужно указать Python правильную директорию, которую он должен использовать, чтобы искать ваши модули. Чтобы сделать это, необходимо установить переменную Enviroment PYTHONPATH:
> export PYTHONPATH=$PYTHONPATH:/path/to/module_test
Теперь, если вы попытаетесь запустить скрипт, он должен импортировать a.hello
, как и ожидалось!
PS: Вы должны прочитать официальный учебник Python, специально в главе 6, который объясняет концепцию модулей и пакетов:
http://docs.python.org/3/tutorial/modules.html
Это должно дать вам основную understading и поможет вам решить ваши проблема.
Похоже, что каталог 'a' может быть не на вашем Pythonpath. Отправьте свой точный стек или вы не получите больше полезной помощи. –