다음 디렉터리 구조를 상상해 보세요.
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은 상대 모듈을 참조하는 메커니즘을 제안합니다. 메인 모듈로. Python 2.6 이상 버전에서는 다음 구문을 사용하여 기본 모듈을 기준으로 모듈을 가져올 수 있습니다.
from . import mod2 from .. import sub2
이 동작은 하위 패키지 가져오기에 대해 예상되는 기능과 일치하여 일관되고 직관적인 가져오기 메커니즘을 보장합니다.
위 내용은 Python에서 '비패키지에서 상대 가져오기 시도' 오류를 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!