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__'로 실행하고 있다는 것입니다.
상대 가져 오기는 모듈의 __name__ 속성을 사용하여 패키지 계층 구조에서 해당 모듈의 위치를 결정합니다. 모듈 이름에 패키지 정보가 포함되지 않은 경우 (예 : '__main__'로 설정 됨) 상대 가져 오기는 모듈이 실제로 파일 시스템에있는 위치에 관계없이 모듈이 최상위 모듈 인 것처럼 확인됩니다.
Python 2.6에서는 기본 모듈과 관련된 모듈을 참조하는 기능을 추가합니다. PEP 366 은 변경 사항을 설명합니다.
업데이트 : Nick Coghlan에 따르면 권장되는 대안은 -m 스위치를 사용하여 패키지 내에서 모듈을 실행하는 것입니다.
출처 : https://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python
728x90
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
파이썬 생성기와 반복기의 차이점 (0) | 2021.11.24 |
---|---|
Python의 문자열 비교 : is vs == (0) | 2021.11.23 |
Python의 open ()은 파일이 없으면 파일을 생성해서 쓰는 방법 (0) | 2021.11.23 |
Python 3에서 문자열을 바이트로 변환하는 가장 좋은 방법 (0) | 2021.11.22 |
Python 현재 버전을 출력하는 방법 (0) | 2021.11.22 |