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

У меня есть приложение python, подобное этому

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

Что я пытаюсь сделать, запускается unit test 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

Итак, как я могу импортировать класс из папки обхода...

Ответ 1

Если ваша корневая папка находится в вашем pythonpath, и вы делаете ее импортируемым пакетом следующим образом:

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

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

from crawl.john import John

или

from ..crawl.john import John

Ответ 2

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