> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 \'ValueError: 최상위 패키지를 넘어서 상대 가져오기를 시도했습니다\' 오류가 발생하는 이유는 무엇입니까?

Python에서 \'ValueError: 최상위 패키지를 넘어서 상대 가져오기를 시도했습니다\' 오류가 발생하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-26 04:48:14
원래의
605명이 탐색했습니다.

Why Am I Getting a

상대 가져오기 오류: 최상위 패키지를 넘어서

Python 3에서 상대 가져오기는 동일한 패키지 내의 모듈을 참조하는 편리한 방법을 제공합니다. 디렉토리 또는 패키지. 그러나 "ValueError: 최상위 패키지를 넘어서 상대 가져오기 시도" 오류가 발생하면 당황스러울 수 있습니다.

다음 패키지 구조를 고려하십시오.

package/
    __init__.py
    A/
        __init__.py
        foo.py
    test_A/
        __init__.py
        test.py
로그인 후 복사

하위 패키지(예: test.py의 ..A import foo)에서 다음 조건에 해당하는 경우 앞서 언급한 오류가 발생할 수 있습니다. met:

  1. 패키지 디렉터리(package/) 내에서 모듈(예: python -m test_A.test)을 실행하고 있으며
  2. 다음 명령을 사용하고 있지 않습니다. 패키지를 최상위 패키지로 지정합니다(예: python -m package.test_A.test).

이유 이 오류는 Python 가져오기 메커니즘의 근본적인 측면에서 발생합니다. 패키지가 로드되면 "최상위 패키지"로 간주되며 상대 가져오기는 해당 패키지 또는 하위 패키지 내의 모듈만 참조할 수 있습니다. 그러나 Python은 모듈을 직접 실행할 때 패키지의 상위 디렉터리를 패키지로 자동 인식하지 않습니다.

따라서 위의 시나리오에서 패키지 디렉터리 내에서 python -m test_A.test를 실행하면 상위 디렉터리는 디렉토리('패키지/')는 패키지로 간주되지 않으며 ..A import foo의 상대 가져오기는 효과적으로 최상위 패키지를 넘어서려고 시도합니다.

이 오류를 해결하려면 다음을 확인하세요. 모듈을 실행할 때 전체 패키지 경로를 지정합니다:

python -m package.test_A.test
로그인 후 복사

위 내용은 Python에서 \'ValueError: 최상위 패키지를 넘어서 상대 가져오기를 시도했습니다\' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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