본문 바로가기
프로그래밍/python

[파이썬] __init__.py 파일 이해하기: 패키지 초기화의 핵심

by 코끼리_땃쥐 2024. 12. 30.

 

파이썬을 배우다 보면 디렉토리에 __init__.py라는 이름의 파일이 포함된 것을 보게 됩니다. 이 파일은 파이썬 패키지를 구성하는 데 핵심적인 역할을 합니다. 이번 글에서는 __init__.py 파일이 무엇인지, 왜 필요한지, 그리고 어떻게 사용하는지에 대해 알아보겠습니다.

__init__.py란 무엇인가요?

__init__.py는 특정 디렉토리를 **패키지(package)**로 정의하는 데 사용되는 특별한 파일입니다. 이 파일은 패키지를 초기화하거나 필요한 설정을 수행하는 데 유용합니다.

  • 패키지란?
    • 파이썬에서 패키지는 모듈 파일을 그룹으로 묶어주는 디렉토리입니다.
    • 예를 들어, 대규모 프로젝트에서 관련된 여러 모듈을 구조적으로 관리하기 위해 패키지를 사용합니다.

주요 역할

  1. 패키지 식별자
    • __init__.py는 디렉토리가 패키지임을 파이썬에 알리는 역할을 합니다.
    • 파이썬 3.3 이후로는 선택 사항이지만, 여전히 명시적으로 포함하는 것이 좋습니다.
  2. 초기화 코드 실행
    • 패키지가 import될 때 실행되는 초기화 코드를 작성할 수 있습니다.
    • 예를 들어, 하위 모듈을 로드하거나 설정 값을 정의할 수 있습니다.
  3. 공용 인터페이스 정의
    • __init__.py를 사용하여 패키지의 공용 API를 명시적으로 지정할 수 있습니다.

예제: 패키지 구조에서 __init__.py의 사용

1. 기본 패키지 구조

다음과 같은 디렉토리 구조를 가정해 봅시다

더보기

my_package/
├── __init__.py
├── module1.py
├── module2.py

각 모듈의 내용은 다음과 같습니다

# module1.py
def greet():
    return "Hello from module1!"

# module2.py
def welcome():
    return "Welcome from module2!"

__init__.py 파일을 포함시키면 이 디렉토리를 패키지로 사용할 수 있습니다.

from my_package import module1, module2

print(module1.greet())   # 출력: Hello from module1!
print(module2.welcome()) # 출력: Welcome from module2!

 

2. __init__.py에서 초기화 코드 작성

__init__.py를 활용해 패키지를 초기화하거나 공용 인터페이스를 정의할 수 있습니다

# my_package/__init__.py
from .module1 import greet
from .module2 import welcome

이제 패키지를 사용할 때 더 간단하게 호출할 수 있습니다

from my_package import greet, welcome

print(greet())   # 출력: Hello from module1!
print(welcome()) # 출력: Welcome from module2!

3. 동적 초기화 작업

__init__.py 파일에서 초기화 작업을 포함할 수도 있습니다

# my_package/__init__.py
print("Initializing my_package...")

config = {
    "version": "1.0",
    "author": "Your Name",
}

패키지가 import될 때 초기화 코드가 실행됩니다

import my_package
# 출력: Initializing my_package...

고급 사용법

1. 서브패키지 초기화

패키지가 하위 디렉토리를 포함하는 경우, 각 디렉토리에 __init__.py를 추가하여 계층적으로 초기화할 수 있습니다

더보기

my_package/
├── __init__.py
├── sub_package/
│       ├── __init__.py
│       ├── submodule.py

sub_package/__init__.py를 작성하여 초기화 작업을 정의합니다

# sub_package/__init__.py
from .submodule import some_function

2. 네임스페이스 패키지

파이썬 3.3부터는 __init__.py 없이도 패키지를 사용할 수 있습니다. 이를 네임스페이스 패키지라고 합니다. 그러나 명시적인 초기화 작업이 필요할 경우 여전히 __init__.py를 사용하는 것이 좋습니다.

 

요약

  • __init__.py는 디렉토리를 패키지로 정의하고 초기화하는 데 중요한 역할을 합니다.
  • 패키지 초기화, 서브패키지 구성, 공용 인터페이스 정의 등 다양한 용도로 활용됩니다.
  • 명확하고 유지 관리하기 쉬운 패키지를 설계하려면 __init__.py의 개념과 활용법을 잘 이해하는 것이 중요합니다.

댓글