49 votes

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

Lorsque j'exécute des tests localement, son fonctionnement est correct, mais après avoir créé le menu fixe et exécuté à l'intérieur du conteneur, l'erreur est inférieure à celle obtenue.

     /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.

97voto

A J Points 2358

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 , au moment où le test l'exécutait en utilisant mon chemin d' ordinateur local au lieu de le chemin dans le conteneur docker.

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

22voto

Datageek Points 2846

Vous pouvez utiliser le fichier .dockerignore pour exclure que tous les dossiers __pycache__ soient envoyés au contexte de l'image du menu fixe:

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

 **/__pycache__
**/*.pyc
 

6voto

Abhilash Points 81

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

2voto

phaedrus Points 8060

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 ne nécessite pas de fichier __init__.py dans les dossiers source, mais l’ajout de __init__.py sous A/B et C/D résolu le problème.

0voto

monitorius Points 133

Vous pouvez définir la variable d'environnement PY_IGNORE_IMPORTMISMATCH=1 pour ignorer ces erreurs. Cela devrait aller dans des cas simples, comme l'exécution de tests à l'intérieur et à l'extérieur du conteneur docker.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: