파이썬 기본 문법: 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
    • 비유
      • 모듈: 레시피의 개별적인 요리법 (예: 김치찌개 레시피)
      • 패키지: 여러 레시피를 담은 요리책 (예: 한식 요리책)
      • 라이브러리: 다양한 요리책과 조리 도구를 모아놓은 주방 (예: 한식 전문 주방)
    • 라이브러리는 종종 여러 개의 패키지로 구성될 수 있으며, 각 패키지는 여러 개의 모듈을 포함할 수 있습니다. 따라서 라이브러리는 가장 큰 범위의 개념이라고 볼 수 있습니다. (모듈 ⊂ 패키지 ⊂ 라이브러리)

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))