> 백엔드 개발 > 파이썬 튜토리얼 > 계층적 프로젝트 구조에서 pytest를 사용할 때 'ImportError: No Module Named...' 오류를 어떻게 수정할 수 있습니까?

계층적 프로젝트 구조에서 pytest를 사용할 때 'ImportError: No Module Named...' 오류를 어떻게 수정할 수 있습니까?

DDD
풀어 주다: 2024-12-01 09:31:14
원래의
804명이 탐색했습니다.

How Can I Fix

모듈 가져오기 오류가 있는 pytest의 PATH 문제 해결

pytest를 사용하여 계층적 파일 구조가 있는 프로젝트에서 테스트를 실행할 때 다음이 발생할 수 있습니다. 애플리케이션 경로에서 모듈을 가져올 때 "ImportError: No module names ..." 오류가 발생합니다. 이 문제는 필요한 모듈에 대한 경로를 포함하도록 sys.path를 수정해야 하기 때문에 발생합니다.

pytest >= 7에 대한 권장 접근 방식: pythonpath 설정

pytest 버전 7 이상에서는 pythonpath 구성 값을 사용하여 단순화된 솔루션을 제공합니다. 이를 통해 해결 방법 없이 sys.path에 특정 경로를 추가할 수 있습니다. 구성 파일(pyproject.toml 또는 pytest.ini)에서 다음과 같이 포함하려는 경로를 지정할 수 있습니다.

[tool.pytest.ini_options]
pythonpath = [
  "."
]
로그인 후 복사
[pytest]
pythonpath = .
로그인 후 복사

Original Answer for pytest < 7: conftest 솔루션

이전 버전의 pytest(7 미만)를 사용하는 경우 빈 conftest.py 솔루션을 사용할 수 있습니다. 여기에는 프로젝트 루트 디렉터리에 빈 conftest.py 파일을 만드는 작업이 포함됩니다. 그러면 pytest가 conftest.py 파일의 상위 디렉터리를 sys.path에 자동으로 추가하여 가져오기 문제를 해결합니다.

설명

Pytest는 실행 중에 conftest 모듈을 검색합니다. 맞춤형 후크 및 고정 장치를 수집하기 위한 테스트 컬렉션입니다. 이러한 모듈에서 사용자 정의 개체를 가져오기 위해 pytest는 conftest.py의 상위 디렉터리를 sys.path에 추가합니다.

대체 솔루션

이 문제에 대한 추가 솔루션이 존재합니다. 프로젝트 구조:

  • 패키지 루트 디렉터리: conftest.py 파일을 패키지 루트 디렉터리에 배치합니다. 이 디렉터리에는 하위 패키지가 포함되어 있지만 패키지 자체는 아닙니다(__init__.py 파일 없음).
  • src 레이아웃: src 레이아웃과 함께 사용할 수 있지만 src 디렉토리에 conftest.py를 배치하면 src 레이아웃의 이점이 무효화될 수 있습니다. 대신 패키지 루트 디렉터리에 배치하는 것이 좋습니다.

결론

sys.path를 조정하거나 conftest.py 솔루션을 사용하여 문제를 해결할 수 있습니다. "ImportError: No module names ..." 오류가 발생하고 pytest 환경에서 성공적인 테스트 실행을 보장합니다.

위 내용은 계층적 프로젝트 구조에서 pytest를 사용할 때 'ImportError: No Module Named...' 오류를 어떻게 수정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿