>백엔드 개발 >파이썬 튜토리얼 >Python에서 '비패키지에서 상대 가져오기 시도'가 나타나는 이유는 무엇입니까?

Python에서 '비패키지에서 상대 가져오기 시도'가 나타나는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-21 13:31:09798검색

Why Do I Get

Python의 상대 가져오기

일반적인 오류인 "비패키지에서 상대 가져오기 시도"는 Python에서 상대 가져오기 작업을 할 때 자주 발생합니다. 파이썬. 이 문서의 목적은 상대 가져오기의 개념을 명확히 하고 이 오류를 해결하기 위한 솔루션을 제공하는 것입니다.

스크립트와 모듈의 차이점

가장 큰 차이점은 Python 파일이 어떻게 저장되는지에 있습니다. 짐을 실은. python myfile.py를 사용하여 직접 실행되는 파일은 최상위 스크립트로 간주됩니다. 반대로, 다른 파일 내에서 import 문을 사용하여 가져온 파일은 모듈입니다. 이러한 구별은 상대 가져오기를 이해하는 데 중요합니다.

이름 지정의 중요성

로드 시 각 파일에는 name 속성에 저장된 이름이 할당됩니다. . 스크립트로 로드된 경우 해당 이름은 __main__으로 설정됩니다. 모듈로 가져온 경우 해당 이름은 해당 패키지가 속한 패키지와 파일 이름을 모두 반영합니다.

예를 들어 제공된 디렉터리 구조에서:

package/
    __init__.py
    subpackage1/
        __init__.py
        moduleX.py
        moduleY.py
    subpackage2/
        __init__.py
        moduleZ.py
    moduleA.py

moduleX를 가져오면 이름이 할당됩니다. package.subpackage1.moduleX, moduleA를 가져오는 동안 이름은 package.moduleA가 됩니다. 그러나 두 모듈 중 하나를 직접 실행하면 해당 이름이 __main__으로 설정되어 패키지 정보가 표시되지 않습니다.

상대 가져오기

상대 가져오기는 다음을 사용하여 패키지 계층 구조를 탐색합니다. 모듈의 이름. 예를 들어 from .. import foo는 계층 구조 위로 이동함을 나타냅니다. from .. import를 사용하여 Ascension을 사용하려면 충분한 점이 포함된 모듈 이름이 필요합니다.

비패키지 모듈

그러나 점이 없는 이름을 가진 모듈은 패키지의 일부로 간주되지 않습니다. 패키지. 따라서 해당 모듈에서는 패키지가 아닌 오류로 인해 상대 가져오기가 실패합니다.

해결책

오류를 해결하려면 다음 해결 방법을 고려하십시오.

  1. 모듈을 패키지로 실행: python -m package.subpackage1.moduleX를 사용하세요. 모듈을 스크립트로 실행하지 않고 로드합니다.
  2. 가져오기와 별도로 실행: 패키지 디렉토리 외부에서 스크립트를 실행하고 그 내부에서 모듈을 가져와 상대 가져오기를 활성화합니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.