Проблема пути с 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 111

9 ответов:

Да, исходная папка не находится в пути Python, если вы cd каталог тестов.

у вас есть 2 варианта:

  1. добавить путь вручную к тестовым файлам, что-то вроде этого:

    import sys, os
    myPath = os.path.dirname(os.path.abspath(__file__))
    sys.path.insert(0, myPath + '/../')
    
  2. запустите тесты с 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

Run pytest сам модуль с: python -m pytest tests

Я создал это в качестве ответа на ваш вопрос и мое недоумение. Надеюсь, это поможет. Обратите внимание на 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 в качестве тестовой зависимости. Убедитесь, что вы также устанавливаете требования к тестированию.