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.py
및 C/D/main.py
. 파이썬 3는 필요하지 않습니다 __init__.py
소스 폴더에서 파일을하지만, 추가 __init__.py
아래 A/B
와 C/D
문제를 해결했다.
PY_IGNORE_IMPORTMISMATCH=1
이 오류를 건너 뛰도록 환경 변수 를 설정할 수 있습니다 . 도커 컨테이너 내부 및 외부에서 테스트를 실행하는 것과 같은 간단한 경우에는 문제가 없습니다.
참조 URL : https://stackoverflow.com/questions/44067609/getting-error-importmismatcherror-while-running-py-test
'IT TIP' 카테고리의 다른 글
'hadoop fs -head'쉘 명령이없는 이유는 무엇입니까? (0) | 2020.12.28 |
---|---|
bash 스크립트에서 다른 사용자의 $ HOME 디렉토리를 얻는 방법은 무엇입니까? (0) | 2020.12.28 |
2 개의 개별 프로세스간에 인 메모리 데이터를 공유 할 수 있습니까? (0) | 2020.12.28 |
UIImagePickerController가 화면을 채우지 않습니다. (0) | 2020.12.28 |
C #은 foreach의 if 문을 기반으로 목록의 다음 항목으로 이동합니다. (0) | 2020.12.28 |