Модуль пакетного тестирования Nosetest, который сам содержит импорт в пакете - PullRequest
0 голосов
/ 12 марта 2020

У меня есть каталог, структурированный следующим образом:

/my_project
  /my_module
    __init__.py
    db_engine.py
    db_mapped_classes.py
    manifest_parser.py
    manifest_parser_test.py

Операторы импорта в manifest_parser_test.py выглядят следующим образом:

from manifest_parser import parse_manifest

Самому модулю manifest_parser.py необходимо импортировать некоторые классы в пакете для работы:

from db_mapped_classes import Video, Representation

Когда я запускаю python manifest_parser_test.py из /my_project в консоли, у интерпретатора нет проблем с импортом чего-либо. Когда я запускаю nosetests my_module из того же каталога, я получаю следующую ошибку:

> nosetests my_module

Traceback (most recent call last):
   (...)
    content_db\manifest_parser_test.py line 1 in <module>
      from manifest_parser import parse_manifest
   ModuleNotFoundError: No module named 'manifest_parser'

Если я изменю импорт в manifest_parser_test.py на следующее:

from my_module.manifest_parser import parse_manifest

Nosetests дает мне следующее исключение:

> nosetests my_module

Traceback (most recent call last):
(...)
content_db\manifest_parser_test.py line 1 in <module>
      from content_db.manifest_parser import parse_manifest
    content_db\manifest_parser.py line 4 in <module>
      from db_mapped_classes import Video, Representation
   ModuleNotFoundError: No module named 'db_mapped_classes'

Кроме того, теперь интерпретатор не может импортировать анализатор манифеста при прямом запуске:

> python my_module/manifest_parser_test.py

Traceback (most recent call last):
  File "content_db/manifest_parser_test.py", line 1, in <module>
    from content_db.manifest_parser import parse_manifest
ModuleNotFoundError: No module named 'content_db'

Как мне структурировать мои python файлы по порядку упаковать мой модуль, но все же разрешить запуск тестов носа, как положено?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...