Python에서 상대 가져오기 구현
Python에서 계층적 디렉터리 구조로 작업할 때 다른 하위 디렉터리에서 모듈을 가져와야 합니다. ".."을 사용하는 전통적인 상대 가져오기는 특정 시나리오에서 오류를 일으킬 수 있습니다. 특히 모듈을 인터프리터에 인수로 전달하여 모듈을 메인 모듈로 실행하는 경우 상대 가져오기가 실패합니다.
PEP 328에 따르면 상대 가져오기는 모듈의 name 속성에 의존합니다. 패키지 계층 구조에서 해당 위치를 결정합니다. 그러나 이름이 '__main__'으로 설정된 경우, 모듈을 메인 모듈로 실행할 때와 마찬가지로 상대 가져오기는 해당 파일에 관계없이 모듈이 최상위 모듈인 것처럼 해결됩니다. 시스템 위치.
이 문제를 해결하기 위해 Python 2.6에서는 기본 모듈을 기준으로 모듈을 참조하는 기능을 도입했습니다. 이는 PEP 366에 설명되어 있습니다. 이 기능을 활용하면 "비패키지에서 상대 가져오기 시도" 오류가 발생하지 않고 상대 가져오기를 수행할 수 있습니다.
예:
다음과 같은 디렉토리 구조에서:
app/ __init__.py sub1/ __init__.py mod1.py sub2/ __init__.py mod2.py
mod1에서 mod2를 가져오려면 다음을 사용할 수 있습니다. 다음 구문:
from importlib.machinery import SourceFileLoader mod2 = SourceFileLoader('mod2', 'sub2/mod2.py').load_module()
또는 모듈을 기본 모듈로 실행하지 않는 경우 일반적인 상대 가져오기 구문이 작동합니다.
from ..sub2 import mod2
위 내용은 Python에서 상대 가져오기를 안정적으로 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!