Ошибка "Pytest": не удалось загрузить path/to/conftest.py"

я получаю следующую ошибку, когда я пытаюсь запустить pytest repo/tests/test_file.py:

$ pytest repo/tests/test_file.py
Traceback (most recent call last):
  File "/Users/marlo/anaconda3/envs/venv/lib/python3.6/site-packages/_pytest/config.py", line 329, in _getconftestmodules
    return self._path2confmods[path]
KeyError: local('/Users/marlo/repo/tests/test_file.py')

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/Users/marlo/anaconda3/envs/venv/lib/python3.6/site-packages/_pytest/config.py", line 329, in _getconftestmodules
    return self._path2confmods[path]
KeyError: local('/Users/marlo/repo/tests')

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/Users/marlo/anaconda3/envs/venv/lib/python3.6/site-packages/_pytest/config.py", line 362, in _importconftest
    return self._conftestpath2mod[conftestpath]
KeyError: local('/Users/marlo/repo/conftest.py')

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/Users/marlo/anaconda3/envs/venv/lib/python3.6/site-packages/_pytest/config.py", line 368, in _importconftest
    mod = conftestpath.pyimport()
  File "/Users/marlo/anaconda3/envs/venv/lib/python3.6/site-packages/py/_path/local.py", line 686, in pyimport
    raise self.ImportMismatchError(modname, modfile, self)
py._path.local.LocalPath.ImportMismatchError: ('conftest', '/home/venvuser/venv/conftest.py', local('/Users/marlo/repo/conftest.py'))
ERROR: could not load /Users/marlo/repo/conftest.py

моя структура РЕПО

lib/
    -tests/
        -test_file.py
app/
    -test_settings.py
pytest.ini
conftest.py
...

другие люди запустили этот код нормально, и в соответствии с этот вопросэтот), моя структура хороша, и я не пропускаю никаких файлов. Я могу только заключить, что что-то о моем компьютере или настройке проекта не так. Если у вас есть какие-либо предложения или идеи, которые я могу пропустить, отправьте им мои путь!

-------------------------------ПОДРОБНЕЕ------------------------------

test_file.py:

def func(x):
    return x + 1

def test_answer():
    assert func(3) == 5

pytest.ini:

[pytest]
DJANGO_SETTINGS_MODULE = app.test_settings
python_files = tests.py test_* *_tests.py *test.py

2 ответов


У меня есть docker, а также работает pytest вне docker тоже, и для меня гораздо более низкое влияние исправить всякий раз, когда это появляется, чтобы удалить все скомпилированные файлы python

find . -name \*.pyc -delete


я понял это, и я отвечу, если у других будет такая же проблема:

Я даже не принял во внимание, что у меня был контейнер docker (того же приложения) в каталоге repo, и, хотя я не запускал контейнер docker, он каким-то образом влиял на пути к файлам.

исправить это:

  1. я повторно клонировал РЕПО из удаленного источника в новую папку, чтобы ничто из старого РЕПО не могло " загрязнить" он.
  2. обновил мою виртуальную среду с помощью .YML спецификации чистого РЕПО

    $ conda env update --name project --file project.yml

  1. мой проект использует базу данных postgres, поэтому я отбросил ее и создал новую

    $ dropdb projectdb
    $ createdb projectdb

  1. поскольку мой проект использует mongo, я также сбросил эту базу данных

    $ mongo projectdb --eval "db.dropDatabase()"

  1. установлен чистый pytest

    $ pip uninstall pytest
    $ pip install pytest

...и вуаля! Я могу запустить pytest.

много спасибо @хефлинг и другим, кто помог мне отладить.