Ошибка импорта Python - запустить unittest

1

Почему я получаю ошибку импорта для модуля, который у меня есть в проекте. Все пакеты находятся под проектом, все они имеют __init __.py, а другие скрипты не дают такой же ошибки. Версия Python - 3.6. Код был написан в среде Unix.

Вот ошибка импорта, которую я получаю. Я пытаюсь запустить тест здесь.

Ran 1 test in 0.001s

FAILED (errors=1)

Error
Traceback (most recent call last):
  File "/usr/lib/python3.6/unittest/case.py", line 59, in testPartExecutor
    yield
  File "/usr/lib/python3.6/unittest/case.py", line 605, in run
    testMethod()
  File "/usr/lib/python3.6/unittest/loader.py", line 34, in testFailure
    raise self._exception
ImportError: Failed to import test module: test_SMSHandler
Traceback (most recent call last):
  File "/usr/lib/python3.6/unittest/loader.py", line 153, in loadTestsFromName
    module = __import__(module_name)
  File "/home/sevvalboylu/server/app/api/test_SMSHandler.py", line 11, in <module>
    from middleware.services import Sender
ModuleNotFoundError: No module named 'middleware'
  • 1
    Возможная копия Django ImportError: нет модуля с именем middleware
  • 1
    Промежуточное ПО не найдено. Попробуйте сначала "pip install middleware"
Показать ещё 1 комментарий
Теги:
python-3.x
unit-testing
testing
runtime-error

1 ответ

0
Лучший ответ

Похоже, у вас отсутствует корневой путь проекта в PYTHONPATH

Из документов (Модули - Путь источника модуля)

Когда импортируется модуль со спамом, интерпретатор сначала ищет встроенный модуль с этим именем. Если он не найден, он ищет файл с именем spam.py в списке каталогов, заданных переменной sys.path. sys.path инициализируется из следующих мест:

  • Каталог, содержащий входной скрипт (или текущий каталог, когда не указан файл).
  • PYTHONPATH (список имен каталогов с тем же синтаксисом, что и переменная оболочки PATH).
  • Значение по умолчанию, зависящее от установки.

Если это решение не сработает для вас, разместите дерево проекта, чтобы упростить поиск проблемы.

  • 0
    Я на самом деле не понял вашего предложения здесь, вы имеете в виду, что у меня нет промежуточного программного обеспечения в моем PYTHONPATH? Как бы я это проверил?
  • 0
    @sevcodes да, я имею в виду именно это. Вы можете получить содержимое PYTHONPATH с помощью следующей команды: python -c "import sys; print(sys.path)"
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню