Импортировать класс из папки на другом уровне

У меня есть такое приложение на Python

/
/crawl.py
/crawl/__init__.py
/crawl/john.py
/tests/test_john.py

Я пытаюсь запустить модульный тест test_john.py, который должен использовать john.py, но он находится в другой папке.

В моем tests/test_john.py я получаю это при запуске

Traceback (most recent call last):
  File "test_john.py", line 2, in <module>
    from john import John
ImportError: No module named john

Итак, как мне импортировать класс из папки обхода контента ....


person Wizzard    schedule 30.10.2011    source источник
comment
вы можете попробовать from crawl.john import John или попробовать from ..crawl.john import John (см. stackoverflow.com/questions/1054271/)   -  person Sandip Agarwal    schedule 30.10.2011


Ответы (2)


Если ваша корневая папка находится в вашем пути к python, и вы делаете ее импортируемым пакетом, как показано ниже:

/__init__.py
/crawl.py
/crawl/__init__.py
/crawl/john.py
/tests/__init__.py
/tests/test_john.py

ты можешь сделать:

from crawl.john import John

or

from ..crawl.john import John
person joaquin    schedule 30.10.2011
comment
Кажется, корневая папка отсутствует на моем пути к Python. Я думал, что он может добавить CWD в путь к python, но этого не произошло. Как это сделать? - person Wizzard; 30.10.2011
comment
это зависит от вашей конфигурации. В Windows для своих пакетов и библиотек я просто добавляю файл site.pth в пакеты сайтов с именем папки (папок). - person joaquin; 30.10.2011

Если ваша ОС поддерживает это, поместите символическую ссылку на ../crawl в каталоге test, а затем используйте from crawl.john import John.

person ekhumoro    schedule 30.10.2011