Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- binary tree
- Medium
- HashTable
- 쉬움
- hash table
- 이진트리
- list
- string
- sorting
- tree
- Depth-first Search
- math
- backtracking
- 문자열
- 미디움
- easy
- binary search
- matrix
- leetcode
- Python
- dfs
- DP
- 중간
- Binary
- Array
- 리트코드
- linked list
- 재귀
- recursive
- two pointers
Archives
- Today
- Total
부부의 코딩 성장 일기
Python에서 __init__.py 의 역할 본문
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를 포함하는 것이 좋다.
'Python > Fundamentals' 카테고리의 다른 글
Python coroutine 코루틴, asyncio 라이브러리 (0) | 2024.03.01 |
---|---|
Python 추상화와 abc 라이브러리 (0) | 2024.02.29 |
데코레이터(Decorator) (0) | 2024.02.19 |
얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) (0) | 2024.02.18 |