> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 상대 가져오기를 안정적으로 구현하는 방법은 무엇입니까?

Python에서 상대 가져오기를 안정적으로 구현하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-25 00:16:10
원래의
427명이 탐색했습니다.

How to Reliably Implement Relative Imports in Python?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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