Python 패키지에서 `__init__.py` 이해
Lukas Schneider
DevOps Engineer · Leapcell

Key Takeaways
__init__.py
는 디렉토리를 Python 패키지로 만들고 패키지 초기화를 활성화합니다.- 패키지 내에서 모듈 가져오기를 단순화하고 제어합니다.
- 이를 포함하면 도구 및 Python 버전 간의 호환성이 보장됩니다.
Python 프로젝트, 특히 여러 모듈과 디렉터리가 관련된 프로젝트를 작업할 때 __init__.py
라는 파일을 접할 수 있습니다. 이는 단순한 파일처럼 보일 수 있지만 Python이 패키지 및 모듈 가져오기를 처리하는 방식에서 중요한 역할을 합니다. 이 문서에서는 __init__.py
가 수행하는 작업, 존재하는 이유, 효과적으로 사용하는 방법을 살펴봅니다.
__init__.py
란 무엇입니까?
__init__.py
는 디렉터리를 Python 패키지로 표시하는 데 사용되는 특수 Python 파일입니다. Python 3.3 이전에는 Python이 가져오는 동안 디렉터리를 패키지로 인식하려면 이 파일이 있어야 했습니다. 최신 Python 버전은 암시적 네임스페이스 패키지(__init__.py
가 없는 패키지)를 지원하지만, 이 파일은 여전히 널리 사용되며 다음과 같은 여러 가지 이유로 권장됩니다.
__init__.py
의 주요 목적
-
패키지 초기화
__init__.py
내부의 코드는 패키지를 가져올 때 실행됩니다. 따라서 패키지 수준 설정 코드를 넣기에 편리한 위치입니다.# mypackage/__init__.py print("mypackage 초기화 중")
누군가
import mypackage
를 실행하면 위의 메시지가 출력됩니다. -
가져올 항목 제어
__init__.py
에서__all__
변수를 정의하여from mypackage import *
를 사용할 때 액세스할 수 있는 하위 모듈을 제어할 수 있습니다.__all__ = ['module1', 'module2']
-
가져오기 단순화
__init__.py
에서 하위 모듈 또는 기호를 가져옴으로써 패키지 사용자가 해당 기능에 액세스하는 방식을 단순화할 수 있습니다.from .module1 import ClassA from .module2 import function_b
이를 통해 사용자는 다음을 작성할 수 있습니다.
from mypackage import ClassA, function_b
대신에:
from mypackage.module1 import ClassA from mypackage.module2 import function_b
-
역방향 호환성 유지 많은 도구와 라이브러리가 여전히
__init__.py
가 있는지 확인합니다. 이를 포함하면 더 광범위한 호환성이 보장되고 코드를 구문 분석하거나 패키징하는 도구의 미묘한 문제를 방지할 수 있습니다.
예제 구조
다음은 간단한 Python 패키지의 예입니다.
mypackage/
│
├── __init__.py
├── module1.py
└── module2.py
이 구조를 사용하면 mypackage
의 하위 모듈로 module1
및 module2
에 액세스할 수 있습니다.
네임스페이스 패키지(Python 3.3+)
Python 3.3부터 __init__.py
파일 없이도 네임스페이스 패키지를 만들 수 있습니다. 이는 단일 논리 패키지를 여러 디렉터리 또는 배포에 배포하는 데 유용합니다. 그러나 초기화 코드 또는 동적 가져오기에 의존하는 경우 특히 주의해서 사용해야 합니다.
언제 __init__.py
를 포함해야 합니까?
- 광범위한 호환성을 위해 코드를 작성하거나 setuptools와 같은 도구를 사용하는 경우 항상
- 패키지 수준 초기화 논리를 포함하려는 경우
- 패키지의 가져오기 인터페이스를 단순화하려는 경우
- 복잡하거나 중첩된 패키지 구조로 작업하는 경우
결론
__init__.py
가 더 이상 모든 경우에 엄격하게 요구되지는 않지만 깨끗하고 체계적이며 사용자 친화적인 Python 패키지를 작성하는 데 중요한 부분으로 남아 있습니다. 사용 방법을 이해하면 코드를 보다 효과적으로 구성하고 패키지를 더 쉽게 사용하고 유지 관리할 수 있습니다.
FAQs
아니요, 하지만 호환성 및 명확성을 위해 권장됩니다.
Python은 __init__.py
내부의 코드를 실행합니다.
예.
저희는 Python 프로젝트 호스팅을 위한 최고의 선택인 Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발합니다.
무제한 프로젝트를 무료로 배포
- 사용량에 대해서만 비용을 지불합니다. 요청도 없고 요금도 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼만 지불합니다.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 쉬운 동시성 처리를 위한 자동 크기 조정.
- 운영 오버헤드가 전혀 없습니다. 구축에만 집중하세요.
설명서에서 자세히 알아보세요!
X에서 팔로우하세요: @LeapcellHQ