python - Obteniendo el error ImportMismatchError mientras se ejecuta py.test
docker pytest (3)
Estoy usando Python 3.6. En mi caso, estaba obteniendo ImportMismatchError
en módulos con el mismo nombre bajo diferentes paquetes, por ejemplo, A/B/main.py
y C/D/main.py
Python 3 no requiere el archivo __init__.py
en las carpetas de origen, pero agregar __init__.py
en A/B
y C/D
resolvió el problema.
Cuando estoy ejecutando pruebas localmente, está funcionando bien, pero después de crear la ventana acoplable y ejecutar dentro del contenedor, obtengo un error por debajo.
/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 - es el WORKDIR en Dockerfile.
Lo arreglé eliminando todos los paquetes de pycache en prueba / directorio, el problema era cuando estaba creando una imagen de ventana acoplable, seleccionando todos mis archivos de pycache y * .pyc , en el momento en que la prueba se ejecuta utilizando la ruta de mi máquina local en lugar de El camino en contenedor docker.
Conclusión: borre sus archivos * .pyc y pycache antes de crear una imagen de ventana acoplable.
HTH
Puede usar el archivo .dockerignore para excluir que todas __pycache__
carpetas __pycache__
no se envíen al contexto de la imagen de la .dockerignore acoplable:
.dockerignore
archivo .dockerignore
, excluye __pycache__
carpetas __pycache__
y los *.pyc
de todas las subcarpetas / carpetas:
**/__pycache__
**/*.pyc