파이썬 기본 문법: 5. 모듈, 패키지, 라이브러리
1. 모듈, 패키지, 라이브러리의 구분
- 파이썬에서는 모듈, 패키지, 라이브러리 등 다양한 표현을 비슷한 의미로 혼용하여 사용하고 있습니다. 그러나 정확하게는 서로 다른 의미를 가지고 있습니다.
- 모듈(Module)
- 정의: 기능을 구현한 파이썬 코드를 담고 있는 하나의 파일(.py 확장자)
- 내용: 변수, 함수, 클래스 등을 정의하고 포함할 수 있음
- 목적: 특정 기능을 수행하는 코드들을 논리적으로 그룹화하여 관리하고 재사용하기 위함
- 예시: math.py, random.py 등과 사용자가 직접 작성한 user_modyle.py 등
- 패키지(Package)
- 정의: 모듈들을 담고 있는 디렉토리 (폴더)
- 특징: 패키지 디렉토리 안에 반드시 ‘__ init__.py’라는 (비어 있을 수도 있는) 파일이 있어야 파이썬이 해당 디렉토리를 패키지로 인식함
- 목적: 관련된 모듈들을 계층적으로 관리하고 이름 충돌을 방지하기 위함(파일 시스템의 폴더 구조와 유사)
- 예시: ‘numpy’, ‘pandas’, ‘django.contrib’ 등
- 라이브러리(Library)
- 정의: 특정 목적을 위해 함께 제공되는 모듈과 패키지의 집합
- 특징: 때로는 C나 C++ 등으로 작성된 확장 모듈을 포함하기도 함
- 목적: 특정 분야의 다양한 기능을 편리하게 사용할 수 있도록 제공함
- 예를 들면, 데이터 분석, 웹 개발, 머신러닝 등 특정 작업을 수행하는 데 필요한 도구들의 모음
- 예시: NumPy (수치 계산), Pandas (데이터 분석), Scikit-learn (머신러닝), Django (웹 프레임워크) 등
- 요약표
구분 정의 구성 요소 목적 예시 모듈 하나의 파이썬 파일 (.py) 변수, 함수, 클래스 등 코드 재사용 및 논리적 그룹화 math.py, my_module.py 패키지 모듈들을 담고 있는 디렉토리 (__ init__.py 포함) 모듈, 하위 패키지 관련된 모듈 관리 및 이름 충돌 방지 numpy, ‘my_package/’ 라이브러리 특정 목적을 위한 모듈과 패키지의 집합 모듈, 패키지, 기타 파일 특정 분야의 다양한 기능 제공 및 편리한 사용 NumPy, Pandas, Django, TensorFlow - 비유
- 모듈: 레시피의 개별적인 요리법 (예: 김치찌개 레시피)
- 패키지: 여러 레시피를 담은 요리책 (예: 한식 요리책)
- 라이브러리: 다양한 요리책과 조리 도구를 모아놓은 주방 (예: 한식 전문 주방)
- 라이브러리는 종종 여러 개의 패키지로 구성될 수 있으며, 각 패키지는 여러 개의 모듈을 포함할 수 있습니다. 따라서 라이브러리는 가장 큰 범위의 개념이라고 볼 수 있습니다. (모듈 ⊂ 패키지 ⊂ 라이브러리)
- 모듈(Module)
2. 모듈의 사용 예시 코드
import time
print('2초간 프로그램을 정지합니다.')
print(time.localtime())
time.sleep(2)
print(time.localtime())
print('2초가 지났습니다.')
import time
print('2초간 프로그램을 정지합니다.')
now = time.localtime()
print('%04d/%02d/%02d %02d:%02d:%02d' % (now.tm_year, now.tm_mon, now.tm_mday,
now.tm_hour, now.tm_min, now.tm_sec))
time.sleep(5)
now = time.localtime()
print('{}/{}/{} {}:{}:{}'.format(now.tm_year, now.tm_mon, now.tm_mday,
now.tm_hour, now.tm_min, now.tm_sec))
print('2초가 지났습니다.')
print('{5}/{2}/{0} {1}:{3}:{4}'.format(now.tm_year, now.tm_mon, now.tm_mday,
now.tm_hour, now.tm_min, now.tm_sec))
3. 모듈 임포트(import) 방법
일반적인 방법
import time print(time.localtime())
모듈 안의 특정 클래스, 패키지 안의 특정 모듈을 임포트하는 방법
from time import sleep now = time.localtime() print('%04d/%02d/%02d %02d:%02d:%02d' % (now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec)) sleep(2) now = time.localtime() print('{}/{}/{} {}:{}:{}'.format(now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec))
코드에서 다른 이름으로 사용하고자 할 때(이름이 너무 길거나 복잡한 경우 등에 활용)
import time as t now = t.localtime() print('%04d/%02d/%02d %02d:%02d:%02d' % (now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec)) t.sleep(2) now = t.localtime() print('{}/{}/{} {}:{}:{}'.format(now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec))