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을 사용하려면 충분한 점이 포함된 모듈 이름이 필요합니다.
비패키지 모듈
그러나 점이 없는 이름을 가진 모듈은 패키지의 일부로 간주되지 않습니다. 패키지. 따라서 해당 모듈에서는 패키지가 아닌 오류로 인해 상대 가져오기가 실패합니다.
해결책
오류를 해결하려면 다음 해결 방법을 고려하십시오.
위 내용은 Python에서 '비패키지에서 상대 가져오기 시도'가 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!