web-dev-qa-db-fra.com

Obtention de l'erreur ImportMismatchError lors de l'exécution de py.test

Lorsque j'exécute des tests localement, cela fonctionne correctement, mais après avoir créé le menu fixe et exécuté dans le conteneur, le message d'erreur ci-dessous s'affiche.

    /usr/local/lib/python3.5/site-packages/_pytest/config.py:325: in _getconftestmodules
    return self._path2confmods[path]
E   KeyError: local('/apis/db/tests')

During handling of the above exception, another exception occurred:
/usr/local/lib/python3.5/site-packages/_pytest/config.py:356: in _importconftest
    return self._conftestpath2mod[conftestpath]
E   KeyError: local('/apis/db/tests/conftest.py')

During handling of the above exception, another exception occurred:
/usr/local/lib/python3.5/site-packages/_pytest/config.py:362: in _importconftest
    mod = conftestpath.pyimport()
/usr/local/lib/python3.5/site-packages/py/_path/local.py:680: in pyimport
    raise self.ImportMismatchError(modname, modfile, self)

_pytest.config.ConftestImportFailure: ImportMismatchError('conftest', '/projects/my_project/db/tests/conftest.py', local('/apis/db/tests/conftest.py'))

/ apis - c'est le WORKDIR dans Dockerfile.

32
A J

Je l'ai corrigé en supprimant tous les _PYCACHE_ pkg sous le répertoire test /, le problème était lorsque je créais une image de menu fixe, il choisissait également tous mes fichiers _PYCACHE_ et * .pyc Lorsque test est exécuté, il utilise le chemin de mon ordinateur local au lieu du chemin dans le conteneur Docker.

Conclusion: effacez vos fichiers * .pyc et _PYCACHE_ avant de créer une image de menu fixe.

70
A J

Vous pouvez utiliser le fichier .dockerignore pour exclure l’envoi de tous les dossiers __pycache__ au contexte de l’image docker:

.dockerignore file, exclut les dossiers __pycache__ et les fichiers *.pyc de tous les sous/dossiers:

**/__pycache__
**/*.pyc
14
Datageek

J'utilise Python 3.6. Dans mon cas, je recevais ImportMismatchError dans des modules portant le même nom sous différents packages, par exemple, A/B/main.py et C/D/main.py. Python 3 n'exige pas de fichier __init__.py dans les dossiers source, mais l'ajout de __init__.py sous A/B et C/D a résolu le problème.

1
amit

Supprimez tous les fichiers .pyc. Vous pouvez le faire par find . -name \*.pyc -delete

0
Abhilash