>백엔드 개발 >파이썬 튜토리얼 >Python 스크립트를 직접 실행할 때 상대 가져오기가 실패하는 이유는 무엇입니까?

Python 스크립트를 직접 실행할 때 상대 가져오기가 실패하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-22 12:43:11618검색

Why Do Relative Imports Fail When Running Python Scripts Directly?

비패키지 스크립트에서 상대 가져오기가 실패하는 이유

문제 정의:

Python 파일에서 상대 가져오기를 시도할 때 최상위 스크립트로 실행되면(예: python myfile.py 입력) 오류 메시지는 다음과 같습니다. 발생: "비패키지에서 상대 가져오기를 시도했습니다."

모듈과 스크립트 이해:

가장 중요한 차이점은 Python이 로드될 때 파일을 해석하는 방법에 있습니다. 스크립트로 직접 실행하면 파일 이름은 "__main__"이 됩니다. 다른 파일에서 모듈로 가져오는 경우 해당 이름은 해당 패키지 구조(예: "package.subpackage.module")를 반영합니다.

상대 가져오기 제한:

상대 가져오기는 모듈의 전체 이름에 의존하여 패키지 계층 구조 내에서의 위치를 ​​결정합니다. 모듈 이름에 패키지 정보(예: "__main__")가 포함되어 있지 않으면 모듈이 패키지의 일부로 간주되지 않기 때문에 상대 가져오기가 실패합니다.

오류 설명:

모듈의 전체 이름에 점이 부족하여 패키지 연결이 없음을 나타내는 경우 Python은 이를 독립 실행형 스크립트로 해석합니다. 상대적 수입이 무효화됩니다. 이 오류는 다음과 같은 경우에 발생합니다.

  1. "-m" 옵션 없이 스크립트로 직접 실행된 파일 내에서 상대 가져오기를 시도하는 경우.
  2. Python 인터프리터가 있는 현재 디렉터리에서 파일을 가져오는 경우 실행 중이므로 Python이 모듈을 다음과 같이 조기에 식별할 수 있습니다. 독립형.

솔루션:

  1. 스크립트를 모듈로 실행: python -m package.subpackage.moduleX를 사용하여 로드 스크립트를 모듈로 사용하여 패키지 연결을 유지하고 상대 항목을 활성화합니다. imports.
  2. 별도의 스크립트 및 모듈: 스크립트를 패키지 외부의 다른 디렉터리로 이동하고 거기에서 가져오면 상대 가져오기가 작동할 수 있습니다.

추가 참고 사항:

  • 패키지 디렉터리는 다음에 포함되어야 합니다. 해당 내용에 대한 안정적인 액세스를 위한 Python 모듈 검색 경로(sys.path).
  • Python 2.6부터 모듈의 "이름"은 이름패키지 모두의 영향을 받습니다. 속성.

위 내용은 Python 스크립트를 직접 실행할 때 상대 가져오기가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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