웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > python

Python에서 __init__.py의 역할 및 예제 알아보기

Last Modified : 2020-09-15 / Created : 2017-11-06
25,855
View Count
파이썬 웹어플리케이션을 들여다보면 __init__.py 이라는 네임의 파일을 매우 많이 발견할 수 있습니다. 아래는 이 파일의 역할은 무엇인지 알아보고자합니다.



# Python에서 __init__.py가 하는 일은?

위 파일들은 하나의 경로에 하나의 파일로 짝을 이루어 존재합니다. 예를들어 아래와 같이 존재합니다.



위 그림을 살펴보면 myApp.py라는 파일이 존재하고 같은 위치에 디렉토리 moduleA가 있습니다. 이때 moduleA를 살펴보면 내부에 __init__.py 이름의 파일이 존재하게 됩니다. 이 파일이 하는 역할을 알아봅니다.


! 패키지 모듈로서 사용하기 위한 목적


이들의 역할은 파일이 위치한 경로를 패키지 모듈처럼 사용할 수 있도록 해주는 중요한 기능을 수행합니다. 쉽게 말하면 우리가 패키지의 모듈을 추가할 때 사용하는 from, import를 이 경로에 사용할 수 있다는 점입니다.

만약 해당 파일이 없다면 모듈을 찾는 경로 from, import를 사용하여 찾을 수 없습니다. 그래서 config에 설정하는 등 번거로운 방법을 찾아야만 하죠. 만약 해당 경로에 위치한 파일 getName.py을 import하는 경우 아래처럼 쓸 수 있을 것입니다.

@ myApp.py
from moduleA import getName

이제 getName.py를 myApp.py에서 import하여 사용할 수 있습니다. 만약 getName이 아래와 같이 내부에 함수siteName()을 가지고 있다면?
@ getName.py
def siteName():
  return 'webisfree'

이 함수를 사용하기 위해서 아래처럼 호출할 수 있을 것입니다.
name = getName.siteName()

또는 아래와 같이 함수 이름만  import하여 사용하는 것도 가능합니다.
from moduleA.getName inport siteName

name = siteName()

둘 다 siteName()을 import하는 방법입니다.


! 해당 경로에 공통 사용되는 기능 및 모듈 사용하기


위의 moduleA에 위치한 __init__.py에는 공통으로 적용 가능한 기능이나 모듈을 포함할 수 있습니다. 예를들어 해당 경로의 위치한 모든 python 파일들이 동일한 baseAll을 필요로하여 각각 아래처럼 선언된 경우 이를 이 곳에 위치시키면 한번만 선언함으로서 모두 같은 모듈을 사용하게됩니다.

@ moduleA/a.py
import baseAll

@ moduleA/b.py
import baseAll

각각 선언된 import를 삭제 후 __init__.py에 한번만 선언하여 사용하면 더 적은 코드를 사용할 수 있죠.

@ moduleA/__init__.py
import baseAll

이제 해당 경로의 모든 파일들은 공통으로 baseAll을 사용할 수 있게됩니다.

Previous

Python 리스트(list) 배열 하나로 합치는 방법

Previous

Python pip 패키지는 어디에 저장되는가?