Py.test Нет модуля с именем *
У меня такая структура папок
App
--App
--app.py
--Docs
--Tests
--test_app.py
В моем test_app.py file
у меня есть строка для импорта моего модуля приложения. Когда я запускаю py.test в корневой папке, я получаю эту ошибку без модуля с именем app. Как мне настроить это?
Ответы
Ответ 1
Итак, вы используете py.test
из /App
. Вы уверены, что /App/App
находится в вашем $PYTHONPATH
?
Если это не так, код, который пытается выполнить import app
, с таким сообщением не удастся.
EDIT0: включая информацию из моего комментария ниже, для полноты.
Попытка импортировать приложение будет успешной только в том случае, если она была выполнена внутри /App/App
, что здесь не так. Вероятно, вы захотите сделать /App/App
пакет, поместив __init__.py
внутри него и изменив свой импорт, чтобы квалифицировать приложение как from App import app
.
EDIT1: по запросу добавив дополнительное объяснение из моего второго комментария ниже.
Поместив __init__.py
внутри /App/App
, этот каталог станет пакетом. Это означает, что вы можете импортировать из него, если он - каталог - отображается в $PYTHONPATH
. То есть вы можете сделать из App import app
, если /App
находится в $PYTHONPATH
. Ваш текущий рабочий каталог автоматически добавляется в $PYTHONPATH
, поэтому при запуске script из /App
импорт будет работать.
Ответ 2
У меня уже был файл __init__.py
в каталоге /App/App
и вы хотели запускать тесты из корня проекта без какой-либо магии управления траекторией:
python -m pytest tests
Результат немедленно выглядит следующим образом:
➟ python -m pytest tests
====================================== test session starts ======================================
platform linux -- Python 3.5.1, pytest-2.9.0, py-1.4.31, pluggy-0.3.1
rootdir: /home/andrew/code/app, inifile:
plugins: teamcity-messages-1.17
collected 46 items
... lines omitted ...
============================= 44 passed, 2 skipped in 1.61 seconds ==============================
Ответ 3
Работая с Python 3 и получая ту же ошибку в подобном макете проекта, я решил ее, добавив файл __init__
в мой модуль tests
.
$ touch tests/__init__.py
Я не очень разбираюсь в упаковке и импорте, но я думаю, что это помогает pytest
работать там, где находится целевой App
модуль.
Ответ 4
Я также получил ту же ошибку при выполнении тестовых случаев для моего приложения, как показано ниже
myproject
--app1
--__init.py__
--test.py
--app2
--__init.py__
--test.py
--__init.py__
Я удалил файл myproject __init.py__ и boom, сейчас выполняются тестовые случаи.