- Published on
5단계: 모듈과 패키지
5-1. 모듈이란?
모듈은 .py
확장자 하나의 파일로 구성되며, 함수, 변수, 클래스 등을 포함할 수 있습니다.
# calc.py
def add(a, b):
return a + b
# main.py
import calc
print(calc.add(2, 3)) # 5
5-2. import 방식
import math
from math import sqrt
import math as m
import 모듈
: 전체 불러오기from 모듈 import 항목
: 선택 불러오기as
: 별칭 지정
5-3. 사용자 정의 모듈
모듈 파일을 프로젝트 디렉토리에 두고 직접 import 합니다.
from my_utils import greet
구조:
/project
main.py
my_utils.py
5-4. 패키지란?
여러 모듈을 디렉토리로 묶은 구조. __init__.py
파일이 반드시 존재해야 합니다.
/mypkg
__init__.py
calc.py
string_util.py
사용 예:
from mypkg import calc
from mypkg.string_util import clean
5-5. name == "main"
# module.py
def run():
print("실행됨")
if __name__ == "__main__":
run()
직접 실행 시에만 동작하고 import 시에는 실행되지 않습니다.
5-6. 모듈 캐싱
Python은 import 시 모듈을 메모리에 캐싱합니다.
다시 import해도 다시 실행되지 않습니다.
수정 후 재실행 시 인터프리터를 재시작하는 것이 안전합니다.
5-7. 상대 경로와 절대 경로
- 절대 경로: 루트부터 명시 (
project.mypkg.module
) - 상대 경로:
.
과..
사용 (from . import helper
)
상대 경로는 패키지 내부 구조에서만 사용 가능합니다.
요약
- 모듈은 하나의
.py
파일, 패키지는 모듈을 포함한 폴더 - 다양한 import 방식으로 구조적으로 관리 가능
__name__ == "__main__"
으로 직접 실행 여부 판단__init__.py
는 패키지 인식에 필요하며, 상대 경로 import는 구조를 명확히 할 때 유용
심화학습
Q1. import 시 실행되지 않게 하려면 어떤 문법을 사용해야 하나요?
A1. if __name__ == "__main__"
블록을 사용하여, 직접 실행된 경우에만 코드를 실행하도록 합니다.
Q2. 모듈 캐싱이 개발 중 문제를 일으킬 수 있는 경우는?
A2. 수정된 모듈이 자동으로 반영되지 않고 예전 버전이 재사용될 수 있어, Python REPL을 재시작해야 할 수 있습니다.
Q3. from-import와 import 차이는 무엇이며 언제 구분해서 써야 할까?
A3. from
은 명확한 대상 접근에 좋고, import
는 전체 네임스페이스 구분을 명확히 할 수 있습니다. 충돌 위험이 있으면 import
가 더 안전합니다.