>백엔드 개발 >파이썬 튜토리얼 >Python에서 '비패키지에서 상대 가져오기 시도' 오류를 어떻게 해결할 수 있나요?

Python에서 '비패키지에서 상대 가져오기 시도' 오류를 어떻게 해결할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-12-24 02:21:15202검색

How Can I Solve

Python의 상대 가져오기: 종합 가이드

문제: 하위 패키지 전체에서 모듈 가져오기

다음 디렉터리 구조를 상상해 보세요.

app/
   __init__.py
   sub1/
      __init__.py
      mod1.py
   sub2/
      __init__.py
      mod2.py

mod1 모듈 내의 mod2에서 무언가를 가져오려면 다음 코드를 사용했습니다. 시도됨:

from ..sub2 import mod2

그러나 이로 인해 "비패키지에서 상대 가져오기 시도가 시도되었습니다."

해결책: 선언된 패키지

오류가 발생하는 이유는 다음과 같습니다. mod1.py 인수를 인터프리터에 전달하여 모듈을 __main__으로 실행하면 Python은 패키지를 무시하고 이를 최상위 모듈로 처리합니다.

이 문제를 해결하려면 sub1 및 sub2 디렉터리 모두에서 __init__.py 파일을 올바르게 초기화해야 합니다. 이는 해당 디렉토리가 실제로 패키지이며 상대 가져오기를 사용하여 가져올 수 있음을 의미합니다.

__init__.py 파일이 있으면 다음 코드는 mod1 내에서 mod2를 성공적으로 가져옵니다.

from ..sub2 import mod2

상대 가져오기 및 PEP 366

PEP 366은 상대 모듈을 참조하는 메커니즘을 제안합니다. 메인 모듈로. Python 2.6 이상 버전에서는 다음 구문을 사용하여 기본 모듈을 기준으로 모듈을 가져올 수 있습니다.

from . import mod2
from .. import sub2

이 동작은 하위 패키지 가져오기에 대해 예상되는 기능과 일치하여 일관되고 직관적인 가져오기 메커니즘을 보장합니다.

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

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