модуль pytest не найден - PullRequest
       5

модуль pytest не найден

0 голосов
/ 12 января 2020

У меня проблемы с запуском pytest в моем пакете. У меня есть следующая структура ...

 tree -f
.
├── [   0 Jan  4 22:04]  ./__init__.py
├── [ 34K Jan 12 11:37]  ./LICENSE
├── [1.4K Jan  6 07:43]  ./README.md
├── [1.1K Jan 12 11:42]  ./setup.cfg
├── [  79 Jan  6 08:22]  ./setup.py
├── [4.0K Jan 12 11:49]  ./tcx2gpx
│   ├── [ 701 Jan  6 23:13]  ./tcx2gpx/__init__.py
│   ├── [4.0K Jan 12 12:13]  ./tcx2gpx/__pycache__
│   │   ├── [ 683 Jan 12 12:13]  ./tcx2gpx/__pycache__/__init__.cpython-36.pyc
│   │   └── [3.0K Jan  6 21:00]  ./tcx2gpx/__pycache__/tcx2gpx.cpython-36.pyc
│   └── [3.1K Jan 12 11:49]  ./tcx2gpx/tcx2gpx.py
├── [4.0K Jan  4 21:52]  ./tests
│   ├── [4.0K Jan  6 06:32]  ./tests/resources
│   │   ├── [288K Jan  6 21:07]  ./tests/resources/2019-10-20 12:51:21.0.gpx
│   │   └── [816K Jan  4 22:03]  ./tests/resources/2019-10-20 12:51:21.0.tcx
│   └── [4.0K Jan 12 12:24]  ./tests/tcx2gpx
│       ├── [ 386 Jan 12 12:17]  ./tests/tcx2gpx/conftest.py
│       ├── [   0 Jan 12 11:48]  ./tests/tcx2gpx/__init__.py
│       └── [1.3K Jan 12 12:24]  ./tests/tcx2gpx/test_tcx2gpx.py
└── [4.0K Jan  6 06:21]  ./tmp
    ├── [288K Jan  6 06:21]  ./tmp/2019-10-20 12:51:21.0.gpx
    └── [ 415 Jan  5 08:38]  ./tmp/test.py

А у моего conftest.py есть следующие ...

"""
Fixtures for test_tcx2gpx
"""
from pathlib import Path
import pytest

from tcx2gpx.tcx2gpx import TCX2GPX

TCX_DIR = Path(__file__).resolve().parents[1]
TCX_FILE = TCX_DIR / 'resources' / '2019-10-20 12:51:21.0.tcx'
GPX_FILE = TCX_DIR / 'resources' / '2019-10-20 12:51:21.0.gpx'


@pytest.fixture
def tcx_file():
    """
    Fixture of TCX file
    """
    return TCX2GPX(TCX_FILE)

При запуске pytest с верхнего уровня я проинформировал ...

____________________________________________________ ERROR collecting test session ____________________________________________________
/home/neil/.virtualenvs/default/lib/python3.6/site-packages/_pytest/config/__init__.py:458: in _importconftest
    return self._conftestpath2mod[key]
E   KeyError: PosixPath('/mnt/work/python/tcx2gpx/tests/tcx2gpx/conftest.py')

During handling of the above exception, another exception occurred:
/home/neil/.virtualenvs/default/lib/python3.6/site-packages/_pytest/config/__init__.py:464: in _importconftest
    mod = conftestpath.pyimport()
/home/neil/.virtualenvs/default/lib/python3.6/site-packages/py/_path/local.py:701: in pyimport
    __import__(modname)
/home/neil/.virtualenvs/default/lib/python3.6/site-packages/_pytest/assertion/rewrite.py:143: in exec_module
    exec(co, module.__dict__)
tests/tcx2gpx/conftest.py:7: in <module>
    from tcx2gpx.tcx2gpx import TCX2GPX
E   ModuleNotFoundError: No module named 'tcx2gpx.tcx2gpx'

Читая вокруг, я нашел несколько тем по этому поводу (например, здесь ) и, поскольку я работаю над CI на GitLab, я решил попробовать изменить PYTHONPATH (как я могу поместить их как часть script, который выполняется при выполнении GitLab CI) ...

export PYTHONPATH="$PYTHONPATH:."
python -c "import sys;print(sys.path)"
['', '/mnt/work/python/tcx2gpx', '/home/neil/.virtualenvs/default/lib64/python
36.zip', '/home/neil/.virtualenvs/default/lib64/python3.6', '/home/neil/.virtualenvs/default/lib64/python3.6/lib
-dynload', '/usr/lib64/python3.6', '/usr/lib/python3.6', '/home/neil/.virtualenvs/default/lib/python3.6/site-pac
kages', '/mnt/work/python/python-tcxparser']
pytest

Но я получаю ту же ошибку, даже если /mnt/work/python/tcx2gpx, где вышеупомянутый каталог структура находится в PYTHONPATH.

Я также пытался использовать python -m pytest, потому что, как указано здесь , это должно автоматически включать текущий каталог в syspath. Я получаю тот же результат: ModuleNotFoundError.

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

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

1 Ответ

0 голосов
/ 12 января 2020

у вас не должно быть __init__.py файла в начале вашего проекта - это заставляет pytest считать, что родительский каталог - это root вашего проекта

удаление, которое исправляет его для me

(отказ от ответственности: я разработчик ядра Pytest)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...