Pytest ModuleNotFoundError - PullRequest
       20

Pytest ModuleNotFoundError

0 голосов
/ 21 января 2020

Даже если я работал в Python, я все еще время от времени сталкиваюсь с проблемами со структурой своего пакета.

Я пытаюсь запустить $ pipenv run pytest из root структура каталогов ниже (т.е. .. выше src /)

src/
   physics/
      __init__.py
      pathing.py
   road/
      tests/
          __init__.py
          test_traffic.py
      __init__.py
      traffic.py
   __init__.py
   main.py

traffi c .py:


    from physics import pathing

    class Intersection():
        ...

    class Vehicle():
        ...

test_traffi c .py


    from src.road.traffic import Intersection, Vehicle

    def test_intersection():
        ...

Тем не менее, меня поразили:

======================================================================= ERRORS ========================================================================
___________________________________________________ ERROR collecting src/road/tests/test_traffic.py ___________________________________________________
ImportError while importing test module '/Users/justian/scripts/py-traffic-sim/src/road/tests/test_traffic.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
src/road/tests/test_traffic.py:1: in <module>
    from src.road.traffic import Intersection, Vehicle
src/road/traffic.py:13: in <module>
    from physics import pathing
E   ModuleNotFoundError: No module named 'physics'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
================================================================== 1 error in 0.38s ===================================================================

Похоже, я неправильно понимаю, как pytest импортирует мои модули, или неправильно понимаю, как мои модули ссылаются друг на друга. И $ pipenv run pytest, и $ pipenv run python -m pytest дают одинаковый результат.

Как правильно импортировать Intersection и Vehicle в test_traffi c .py?

1 Ответ

0 голосов
/ 21 января 2020

Удалите файл __init__.py из src.

например

src/
   physics/
      __init__.py
      pathing.py
   road/
      tests/
          __init__.py
          test_traffic.py
      __init__.py
      traffic.py
   __init__.py    # Remove this one
   main.py
...