Проблема пути с pytest 'ImportError: нет модуля с именем YadaYadaYada'
я использовал easy_install для установки pytest на mac и начал писать тесты для проекта с файловой структурой нравится так:
repo/
repo/app.py
repo/settings.py
repo/models.py
repo/tests/
repo/tests/test_app.py
выполнить py.test
в то время как в каталоге РЕПО, все ведет себя так, как вы ожидали бы
но когда я пытаюсь сделать то же самое на linux или windows (оба имеют pytest 2.2.3 на них), он лает всякий раз, когда он попадает в свой первый импорт чего-то из моего пути приложения. Скажем, например from app import some_def_in_app
нужно ли мне редактировать мой Путь к запуску py.тест на этих системах? Кто-нибудь испытал это?
9 ответов:
Да, исходная папка не находится в пути Python, если вы
cd
каталог тестов.у вас есть 2 варианта:
добавить путь вручную к тестовым файлам, что-то вроде этого:
import sys, os myPath = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, myPath + '/../')
запустите тесты с env var
PYTHONPATH=../
.
Я не уверен, почему py.тест не добавляет текущий каталог в сам PYTHONPATH, но вот обходной путь (который будет выполняться из корня вашего репозитория):
python -m pytest tests/
это работает, потому что Python добавляет текущий каталог в PYTHONPATH для вас.
вы можете работать с PYTHONPATH в корне проекта
PYTHONPATH=. py.test
или использовать pip install в качестве редактируемого импорта
pip install -e . # install package using setup.py in editable mode
Я создал это в качестве ответа на ваш вопрос и мое недоумение. Надеюсь, это поможет. Обратите внимание на PYTHONPATH в обоих py.проверьте командную строку и в tox.Ини.
https://github.com/jeffmacdonald/pytest_test
в частности: вы должны сказать py.тест и tox, где найти модули, которые вы включаете.
С py.тест вы можете сделать это:
PYTHONPATH=. py.test
и токсины, добавьте в свой токс.ini:
[testenv] deps= -r{toxinidir}/requirements.txt commands=py.test setenv = PYTHONPATH = {toxinidir}
conftest
решениенаименее инвазивным решением является добавление пустого файла с именем
conftest.py
на
Я начал получать странные " ConftestImportFailure: ImportError('no module named ..."ошибки, когда я случайно добавил
__init__.py
файл в мой каталог src (который не должен был быть пакетом Python, а просто контейнером всего источника).
Я получал эту ошибку из-за чего-то еще более простого (можно даже сказать тривиального). Я не установил
pytest
модуль. Так простоapt install python-pytest
фиксированная это для меня.'pytest' был бы указан в setup.py в качестве тестовой зависимости. Убедитесь, что вы также устанавливаете требования к тестированию.