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.
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.
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
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.
Supprimez tous les fichiers .pyc. Vous pouvez le faire par find . -name \*.pyc -delete