У меня странная проблема при запуске PyTest для моего проекта.Структура проекта выглядит примерно так.
myproject
├── env
│ └── stuff
├── __init__.py
├── myproject
│ ├── __init__.py
│ └── myfile.py
└── tests
├── __init__.py
└── framework
└── unit
└── test_myfile.py
Код в myproject / myproject работает нормально. Кроме того, в корневом каталоге myproject есть папки с ссылочным кодом в myproject / myproject в виде модуля.
Но когда я запускаю pytest, используя следующий синтаксис (внутри virutalenv)
(env) myproject $ python3.6 -m pytest tests/framework
Все тесты завершаются неудачно со следующими сообщениями об ошибках:
E ModuleNotFoundError: No module named 'myproject.tests'
E _pytest.nodes.Collector.CollectError: ImportError while importing test module '/home/myuser/projects/myproject/tests/__init__.py'.
E Hint: make sure your test modules/packages have valid Python names.
E Traceback:
E ModuleNotFoundError: No module named 'myproject.tests'
Вывод
(env) myproject $ python3.6 -c "import sys; print('\n'.join(sys.path))"
- это
/home/myuser/projects/myproject/env/lib/python36.zip
/home/myuser/projects/myproject/env/lib/python3.6
/home/myuser/projects/myproject/env/lib/python3.6/lib-dynload
/usr/lib/python3.6
/home/myuser/projects/myproject/env/lib/python3.6/site-packages
И, следуя ответам в других публикациях, даже если я вручную добавлю myproject, myproject / myproject и myproject / tests к пути через файл .pth, я получуте же сообщения об ошибках.
Что исправляет сообщения об ошибках, так это добавление пустой папки в myproject / myproject, называемой tests.После этого сообщения об ошибках исчезают и тесты запускаются нормально.Может кто-нибудь объяснить, что вызывает это странное поведение?
РЕДАКТИРОВАТЬ: Решение в комментариях.Проблема была из-за верхнего уровня init .py, которого не должно было быть.