web-dev-qa-db-fra.com

Pytest "Erreur: impossible de charger le chemin / vers / conftest.py"

J'obtiens l'erreur suivante lorsque j'essaie d'exécuter 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

Ma structure de repo est

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

D'autres personnes ont bien exécuté ce code, et selon cette question (et celle-ci ), ma structure est bonne et je ne manque aucun fichier. Je peux seulement conclure que quelque chose sur mon ordinateur ou la configuration de mon projet n'est pas correct. Si vous avez des suggestions ou des idées qui pourraient me manquer, veuillez les envoyer à ma façon!

-------------------------------PLUS DE DÉTAILS----------------- -------------

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
14
Marlo

J'ai également docker et j'exécute pytest en dehors de docker, et pour moi, une solution à faible impact chaque fois que cela se produit consiste à supprimer tous les fichiers compilés python

find . -name \*.pyc -delete

43
LisaD

Je l'ai compris et je répondrai au cas où d'autres auraient le même problème:

Je n'ai même pas pris en considération le fait que j'avais un conteneur docker (de la même application) dans le répertoire repo et, même si je n'exécutais pas le conteneur docker, cela influençait les chemins de fichiers d'une manière ou d'une autre.

Pour résoudre ce problème:

  1. J'ai re-cloné le dépôt depuis la source distante dans un nouveau dossier afin que rien de l'ancien dépôt ne puisse le "contaminer".
  2. Mise à jour de mon environnement virtuel avec les spécifications .yml du repo propre
 
 $ conda env update --name project --file project.yml 
 
  1. Mon projet utilise une base de données postgres, donc je l'ai déposée et j'en ai créé une nouvelle
 
 $ dropdb projectdb 
 $ createdb projectdb 
 
  1. Depuis que mon projet utilise mongo, j'ai également supprimé cette base de données
 
 $ mongo projectdb --eval "db.dropDatabase ()" 
 
  1. Installé un pytest propre
 
 $ pip désinstaller pytest 
 $ pip installer pytest 
 

... et voilà! Je pourrais exécuter pytest.

Un grand merci à @hoefling et à d'autres qui m'ont aidé à déboguer.

1
Marlo