[Python/TIL] 파이썬이 import로 패키지를 불러오는 방법

파이썬이 import 문을 통해 어떻게 패키지 혹은 모듈을 불러오는지 알아보자

김지연
5 min readJan 3, 2022

sys.modulessys.path의 차이점

sys.modules

파이썬에서 이미 불러온 모듈을 저장해놓은 딕셔너리이다.({모듈명 : 모듈객체}) 같은 모듈을 또 불러올 경우 딕셔너리에서 모듈을 찾는 것이므로 처음 불러왔을 때 보다 빠르다.

sys.path

모듈을 import 할 때 모듈을 검색하는 경로들로 이뤄진 리스트이다. ([모듈경로1, 모듈경로2, 모듈경로3]) 파이썬이 sys.modules과 built-in 모듈 내에서도 모듈을 못찾으면 마지막으로 가는 곳이 sys.path이다. 모듈을 찾기 위해서 리스트 내 경로들을 다녀야 하기 때문에 sys.modules의 딕셔너리를 사용할 때 보다 오래 걸린다.

파이썬이 sys 모듈을 찾는 방법

sys.builtin_module_name 를 입력하면 built-in 모듈 목록의 튜플을 확인할 수 있다. sys 모듈은 built-in 모듈이므로 sys 모듈도 이 튜플 내에 있다. 그래서 사용자는pip install sys 를 하지 않아도 import sys를 입력하면 sys 모듈을 불러올 수 있다.

Absolute pathrelative path의 차이점

built-in 모듈이나 pip을 통해 패키지를 설치한 경우엔 import 하는데 복잡하지 않다. 직접 개발한 패키지나 Github 등에서 작은 프로젝트의 패키지를 import 할 경우엔 경로를 설정해줘야 한다.

Absolute Path

절대경로(Absolute path)는 import를 할 때 같은 프로젝트 내에 있는 것들을 파일의 경로와 상관없이 불러오는 방법이다.

그림1 프로젝트 내 패키지 경로 예시

예시로 그림1의 my_app이란 프로젝트 내 package1/module1.py에서 package2/module3.py를 불러와야 한다면

from package2 import module3 와 같은 식으로 프로젝트 폴더의 최상단을 기준으로 경로를 설정한다.

Relative Path

상대경로(Relative path)는 절대경로와 달리 현재 파일을 기준으로 경로를 설정한다. 그림1의 경우 package2/module4.py 에서 package1/module1.py/function2를 불러온다면

from ..package1.module1 import fuction2 와 같은 식으로 해야 한다. 여기서 .. 은 현재 위치에서 상위 폴더로 이동하는 역할이며, . 을 사용할 경우 현재 디렉터리 내에서 찾는 것을 의미한다.

__init__.py의 역할

__init__.py 파일은 해당 파일의 디렉터리가 패키지의 일부임을 알려주는 파일이다. python 3.3 이후에는 __init__.py가 없어도 패키지로 인식하지만 호환성을 위해 넣어두는 것이 좋다. __init__.py 은 내용이 없어도 괜찮다. 하지만 패키지 내 모듈을 모두 불러오는 import * 을 사용하고 싶은 경우 __init__.py 의 내용을 수정해야 한다.

# __init__.py
__all__ = ['module3', 'module4', module5]

위와 같이 수정한다면 from package2 import * 라는 구문을 통해 package2 내의 모듈들을 모두 불러올 수 있다.

https://jins-sw.tistory.com/17

--

--