IT TIP

py.test를 실행하는 동안 ImportMismatchError 오류가 발생합니다.

itqueen 2020. 12. 28. 22:20
반응형

py.test를 실행하는 동안 ImportMismatchError 오류가 발생합니다.


로컬에서 테스트를 실행할 때 제대로 작동하지만 도커를 만들고 컨테이너 내부에서 실행 한 후 오류가 발생합니다.

    /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-Dockerfile의 WORKDIR입니다.


test / 디렉토리 아래에서 모든 __pycache__ pkg 를 제거 하여 문제를 해결했습니다. 문제는 내가 도커 이미지를 만들 때 내 모든 __pycache__* .pyc 파일을 선택했을 때 테스트가 대신 내 로컬 머신 경로를 사용하여 실행될 때였습니다. 도커 컨테이너의 경로.

결론 : 도커 이미지를 만들기 전에 * .pyc__pycache__ 파일을 지 웁니다 .


.dockerignore 파일을 사용하여 모든 __pycache__폴더가 도커 이미지 컨텍스트로 전송되지 않도록 제외 할 수 있습니다 .

.dockerignore모든 하위 / 폴더에서 __pycache__폴더와 *.pyc파일을 제외합니다 .

**/__pycache__
**/*.pyc

모든 .pyc 파일을 삭제하십시오. 당신은 이것을 할 수 있습니다find . -name \*.pyc -delete


Python 3.6을 사용하고 있습니다. 제 경우에는 ImportMismatchError다른 패키지 (예 : A/B/main.pyC/D/main.py. 파이썬 3는 필요하지 않습니다 __init__.py소스 폴더에서 파일을하지만, 추가 __init__.py아래 A/BC/D문제를 해결했다.


PY_IGNORE_IMPORTMISMATCH=1이 오류를 건너 뛰도록 환경 변수 설정할 수 있습니다 . 도커 컨테이너 내부 및 외부에서 테스트를 실행하는 것과 같은 간단한 경우에는 문제가 없습니다.

참조 URL : https://stackoverflow.com/questions/44067609/getting-error-importmismatcherror-while-running-py-test

반응형