> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 '비패키지의 상대 가져오기' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Python에서 '비패키지의 상대 가져오기' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-12-24 21:41:14
원래의
514명이 탐색했습니다.

Why Does Python Throw a

상대 가져오기: 심층 분석

Python 프로그래밍 세계에서 상대 가져오기는 혼란의 일반적인 원인입니다. 이 문서에서는 어디에서나 볼 수 있는 "비패키지에서 상대 가져오기 시도" 오류 메시지를 해결하면서 상대적 가져오기의 복잡성을 자세히 설명합니다.

스크립트와 모듈 구별

이해 스크립트와 모듈의 근본적인 차이점은 매우 중요합니다. Python 파일을 직접 실행하면 스크립트가 되며 __main__이라는 이름이 할당됩니다. 반면, 파일을 임포트하면 패키지 계층 구조에서의 위치를 ​​포함한 이름을 가진 모듈이 됩니다.

Module Naming

지정된 이름 모듈로의 가져오기는 패키지에서 가져왔는지 아니면 해당 디렉터리에서 직접 가져왔는지에 따라 달라집니다. 패키지에서 모듈을 가져온 경우 해당 이름은 패키지와 포함된 하위 패키지(예: package.subpackage1.moduleA)의 점으로 구분된 경로를 따릅니다. 그러나 모듈을 해당 디렉터리에서 직접 가져오는 경우 해당 이름은 모듈 이름(예: moduleA)만 됩니다.

상대 가져오기 및 패키지

상대 가져오기 모듈 이름을 사용하여 패키지 계층 구조에서의 위치를 ​​결정합니다. 모듈 이름에 점이 포함되어 있지 않으면 패키지의 일부로 간주되지 않습니다. 이는 모듈의 현재 디렉터리 외부를 통과하려고 시도하는 상대 가져오기가 "비패키지의 상대 가져오기" 오류와 함께 실패함을 의미합니다.

오류 해결

이 오류를 해결하려면 다음 해결 방법을 고려하세요.

  1. -m을 사용하세요. 옵션: 스크립트를 실행하는 데 사용되는 명령 앞에 -m을 붙입니다. 이는 스크립트가 아닌 모듈로 처리되어야 함을 나타냅니다. 예: python -m package.subpackage1.moduleX
  2. 스크립트를 패키지 디렉터리 밖으로 이동: 스크립트 실행을 위한 별도의 디렉터리를 만들고 패키지의 모듈을 해당 스크립트로 가져옵니다. 이렇게 하면 스크립트가 main 이름을 가진 스크립트로 로드되어 상대 가져오기가 올바르게 작동할 수 있습니다.

패키지 디렉터리가 Python에 포함되어야 한다는 점을 명심하세요. 이러한 솔루션이 작동하기 위한 모듈 검색 경로(sys.path)입니다. 또한 Python 2.6부터 모듈에는 유효 이름에 영향을 미치는 namepackage 속성이 모두 있습니다.

위 내용은 Python에서 '비패키지의 상대 가져오기' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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