Search
🌏

python 에는 relative import 와 absolute import 가 있다. relative import 를 이용해 sys.path 을 수정하지 않고 파일의 상대적 위치를 기준으로 모듈이나 패키지를 임포트할 수 있다.

🚀 prev note
♻️ prev note
🚀 next note
♻️ next note
💡 아이디어
16 more properties
python 은 from . import sthimport sth 의 차이가 존재한다. 하지만 이것을 뭐라고 부르는지 몰랐기 때문에, 각 동작의 차이도 이해할 수 없었고 어려워했다. 하지만 아주 간단하게도, 관련 내용은 PEP 328 에 명시되어 있다. 이 내용은 from . import sth 는 'relative import' , import sth 은 'absolute import' 라고 부르며, absolute import 은 top-level 패키지(참고5:패키지vs모듈) 를 시작으로 모듈을 찾아나가며, relative import 는 해당 모듈(참고5:패키지vs모듈) 이 위치해 있는 경로부터 탐색을 시작한다고 한다(참고4).
조금 더 자명하게 이해하기 위해 디렉토리 구조가 다음과 같은 상황을 생각해 보자.
. ├── project │ ├── example │ │ └── foo.py │ └── run_inside_project.py └── run_outside_project.py
Plain Text
복사
기본 상태
우리는 패키지를 임포트하는 방법의 핵심에 sys.path가 있다는 사실을 알고 있다(from1).
이 상황에서, foo.py 와 같은 디렉토리에 존재하는 foo_2.pyfoo.py 에서 임포트해 사용하려면 어떻게 해야 할까? 단순히 foo.pyfoo_2.py 가 같은 디렉토리에 있다고 해서 import foo_2 를 시전하면 아래 스크린샷과 같은 오류가 발생하게 된다. 그 이유는 sys.pathfoo.py 가 위치해 있는 디렉토리가 존재하지 않기 때문이다(from1).
. ├── project │ ├── example │ │ ├── foo.py │ │ └── foo_2.py │ └── run_inside_project.py └── run_outside_project.py
Plain Text
복사
이럴 때 sys.path 와 상관없이 foo.py 파일이 존재하는 경로부터 다시 탐색을 시작하는 relative import 를 사용할 수 있다. foo.py 파일에서 from . import foo_2 를 이용하면 sys.path 이 변하지 않았지만 foo_2.py 파일이 정상적으로 임포트됨을 알 수 있다.
from
참고
3.