프로그래밍 언어/Python

Python에서 상대 가져 오기를 수행하는 방법

Rateye 2021. 11. 23. 10:13
728x90
반응형
질문 : Python에서 상대 가져 오기를 수행하는 방법은 무엇입니까?

이 디렉토리 구조를 상상해보십시오.

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

mod1 코딩 mod2 에서 무언가를 가져와야합니다. 어떻게해야합니까?

from ..sub2 import mod2 시도했지만 "Attempted relative import in non-package"가 나타납니다.

주변을 훑어 봤지만 " sys.path 조작"해킹 만 발견했습니다. 깨끗한 방법이 없나요?


편집 : 모든 __init__.py 가 현재 비어 있습니다.

sub1 , subX 등)에서 공유되는 클래스가 포함되어 있기 때문에 이렇게하려고합니다.

Edit3 : 내가 찾고있는 동작은 PEP 366에 설명 된 것과 동일합니다 (John B에게 감사드립니다)

답변

모두가 질문에 답하기보다는해야 할 일을 말하고 싶어하는 것 같습니다.

문제는 mod1.py를 인터프리터에 인수로 전달하여 모듈을 '__main__'로 실행하고 있다는 것입니다.

PEP 328에서 :

상대 가져 오기는 모듈의 __name__ 속성을 사용하여 패키지 계층 구조에서 해당 모듈의 위치를 결정합니다. 모듈 이름에 패키지 정보가 포함되지 않은 경우 (예 : '__main__'로 설정 됨) 상대 가져 오기는 모듈이 실제로 파일 시스템에있는 위치에 관계없이 모듈이 최상위 모듈 인 것처럼 확인됩니다.

Python 2.6에서는 기본 모듈과 관련된 모듈을 참조하는 기능을 추가합니다. PEP 366 은 변경 사항을 설명합니다.

업데이트 : Nick Coghlan에 따르면 권장되는 대안은 -m 스위치를 사용하여 패키지 내에서 모듈을 실행하는 것입니다.

출처 : https://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python
728x90
반응형