부부의 코딩 성장 일기

Python에서 __init__.py 의 역할 본문

Python/Fundamentals

Python에서 __init__.py 의 역할

펩시_콜라 2024. 2. 24. 19:00

Python에서 packages를 만들게 되면, __init__.py를 포함하게 된다. 

다들 그렇게 코드를 작성하길래, 왜 필요한지 모른 채 그냥 __init__.py를 추가했었다.

 

그러다가, __init__.py를 추가하지 않고, 해당 packages를 import해서 불러오려고 하다보니, 

modules를 찾을 수 없다는 에러가 떴고, 그 원인이 바로 __init__.py였다

 

__init__.py의 역할은?

__init__.py 파일은 python 패키지를 정의하는 데에 사용되는 파일이다. 주요 역할은 아래와 같은데,

 

1. 패키지 식별자로 사용

  • __init__.py 파일이 있는 디렉토리는 Python에게 패키지로 취급되어야 함을 알린다. 즉, 이 파일이 없다면 해당 디렉토리는 단순한 모듈 디렉토리로 간주가 된다.

2. 초기화 코드 포함

  • __init__.py를 빈 파일로 둘 수도 있지만, 패키지가 로드될 때 실행되는 초기화 코드를 포함할 수 있다. 이를 통해 패키지 수준의 변수, 함수, 클래스 등을 정의하는 것이 가능해진다.

3. 상대 경로 임포트 지원 (에러가 났던 그 이유) 

  • 패키지 내에서 모듈을 상대 경로로 임포트 할 때, __init__.py파일이 필요해진다. 이 파일이 없으면, 패키지로 간주되지 않기 때문에 상대 경로 import가 제대로 작동하지 않을 수 있다. 

아래와 같은 디렉토리 구조를 가진 패키지가 있다고 가정해보면, 

my_package/
|-- __init__.py
|-- module1.py
|-- module2.py

 

__init__.py 파일이 있어야, my_package가 패키지로 인식이 되고, 아래처럼 패키지 내부의 모듈을 임포트 할 수 있게 된다. 

from my_package import module1
from my_package.module2 import some_function

 

하지만, 최신 버전의 Python에서는 __init__.py파일이 없어도 패키지로 간주되는 경우가 있다. 하지만, 하위 버전 호환성을 고려하여 __init__.py를 포함하는 것이 좋다.