모듈, 패키지, 표준 라이브러리부터 pip 관리까지 총정리

앞서 파이썬의 함수와 콜 스택, 그리고 데이터를 유연하게 다루는 범용 반복 함수까지 완벽하게 정복했습니다. 이번 글에서는 방대한 코드를 체계적이고 효율적으로 관리하기 위한 핵심 단위인 모듈(Module)과 패키지(Package), 파이썬 기본 내장 표준 라이브러리, 그리고 서드파티 패키지 관리 도구인 pip의 모든 것을 파헤쳐 보겠습니다.

1. 모듈과 패키지란? (코드 관리의 핵심)

프로그램의 규모가 커지면 수천, 수만 줄의 코드를 하나의 파일에 작성하기 어렵습니다. 모듈과 패키지는 코드를 논리적인 단위로 쪼개고 구조화하여 재사용성을 극대화하기 위한 필수적인 방법입니다.

2. 모듈 (Module)의 개념과 사용법

모듈은 함수, 변수, 클래스 등의 코드 정의가 포함된 하나의 .py 파일입니다. 다른 프로그램에서 불러와(import) 언제든지 재사용할 수 있습니다.

2.1 import 문법과 종류

모듈을 가져오는 방식은 목적에 따라 다양하게 활용할 수 있습니다.

사용 방식 구문 설명 예시 코드
모듈 전체 가져오기 모듈명 전체를 가져오며, 접근 시 모듈명.함수명 형태 사용 import math -> math.sqrt(4)
특정 요소만 가져오기 모듈 내 특정 함수나 클래스만 바로 호출 가능하도록 가져옴 from math import sqrt -> sqrt(4)
별칭(Alias) 지정 모듈 이름이 길 때 이름을 줄여서 사용 import numpy as np -> np.array([1, 2])
# 예시: mymodule.py 파일 생성 및 사용
# mymodule.py
def greet(name):
    return f"Hello, {name}!"

# main.py에서 가져다 쓰기
import mymodule as mm
print(mm.greet("Charlie"))  # 출력: Hello, Charlie!

2.2 모듈 탐색 도구: dir() 함수

dir() 함수를 사용하면 해당 모듈이나 객체가 포함하고 있는 모든 변수, 함수, 속성 목록을 리스트 형태로 확인할 수 있습니다.

import math
print(dir(math)) # math 모듈의 모든 기능 목록 출력

3. 유용한 파이썬 표준 라이브러리 모듈

파이썬은 설치 시 별도의 추가 설치 없이 바로 사용할 수 있는 방대한 표준 라이브러리(Standard Library)를 기본 제공합니다.

  • math (수학 연산): 제곱근(math.sqrt), 삼각함수, 원주율(math.pi) 등 지원

  • random (무작위 값 생성): 난수 발생(random.random(), random.randint(a, b)), 요소 선택(random.choice()), 섞기(random.shuffle())

  • datetime (날짜와 시간): 현재 시각(datetime.datetime.now()), 날짜 연산(datetime.timedelta) 지원

  • os (운영체제 상호작용): 현재 디렉터리 확인(os.getcwd()), 파일/폴더 생성 및 삭제

  • sys (시스템 정보 제어): 파이썬 버전 확인(sys.version), 프로그램 강제 종료(sys.exit())

  • collections (고급 자료구조): 빈도수 계산(Counter), 기본값 딕셔너리(defaultdict), 양방향 큐(deque) 제공

from collections import Counter, deque

# Counter 활용 예시
count = Counter([1, 2, 2, 3, 3, 3])
print(count)  # 출력: Counter({3: 3, 2: 2, 1: 1})

4. 모듈 실행의 비밀: __name__ == '__main__'

파이썬 파일을 직접 실행할 때와 다른 파일에서 import하여 모듈로 사용할 때의 동작을 구분해 주는 강력한 문법입니다.

  • __name__ 변수: 파이썬이 내부적으로 관리하는 모듈 이름 저장 변수

  • 직접 실행될 때는 값이 '__main__'이 되고, 다른 곳에서 임포트될 때는 해당 모듈의 파일 이름이 됩니다.

# mymodule.py
def greet(name):
    return f"Hello, {name}!"

# 직접 실행했을 때만 아래 테스트 코드가 동작함
if __name__ == '__main__':
    print("스크립트로 직접 실행되었습니다.")
    print(greet("Test"))

  • 활용 목적: 모듈 내부의 함수를 테스트하기 위한 코드(__main__)를 작성해 두어도, 다른 파일에서 이 모듈을 임포트할 때는 테스트 코드가 실행되지 않고 안전하게 함수들만 불러와 쓸 수 있습니다.

5. 패키지 (Package)와 서브 패키지 구조

패키지는 여러 모듈 파일을 계층적인 디렉토리(폴더) 형태로 묶어 관리하는 구조입니다.

  • __init__.py: 해당 디렉토리가 파이썬 패키지임을 알려주는 초기화 파일입니다. (최신 파이썬에서는 없어도 동작하지만 명시적 생성을 권장합니다.)

  • 서브 패키지: 패키지 내부에 또 다른 폴더를 두어 대규모 프로젝트를 체계적으로 분류할 수 있습니다.

mypackage/
    ├── __init__.py
    ├── mathutils.py       # 모듈
    └── subpackage/        # 서브 패키지
        ├── __init__.py
        └── module_in_sub.py
# 패키지 내부 모듈 불러오기
from mypackage import mathutils
print(mathutils.add(3, 4))

from mypackage.subpackage import module_in_sub
print(module_in_sub.hello())

6. 패키지 관리 도구: pip 활용법과 requirements.txt

파이썬 기본 라이브러리 외에 전 세계 개발자들이 만든 오픈소스 서드파티 패키지(PyPI 저장소 기반)를 설치하고 관리할 때는 pip 명령어를 사용합니다.

  • 패키지 설치: pip install 패키지이름

  • 특정 버전 설치: pip install 패키지이름==1.0.0

  • 최신 업그레이드: pip install --upgrade 패키지이름

  • 패키지 삭제: pip uninstall 패키지이름

  • 설치된 목록 확인: pip list

requirements.txt를 통한 일괄 관리

협업 시 프로젝트에 필요한 외부 라이브러리 목록을 파일로 공유하고 한 번에 설치할 수 있습니다.

  1. requirements.txt 파일 작성:

    requests==2.25.1
    pandas==1.2.0
    numpy==1.19.5
    

  2. 한 번에 설치하기

    pip install -r requirements.txt
    

7. 모듈과 패키지 한눈에 비교하기 

특징 모듈 (Module) 패키지 (Package)
물리적 형태 단일 파일 (.py 확장자) 디렉토리 (폴더 형태)
구성 요소 함수, 클래스, 변수 등 코드 집합 여러 모듈 및 서브 패키지들의 집합
주요 목적 기능별 코드 그룹화 및 재사용 모듈들의 계층적 구조화 및 이름 공간(Namespace) 관리
접근 단위 module_name.function_name package_name.module_name.function_name
비유 레시피 카드 한 장 레시피 카드들이 꽂혀있는 요리책

답글 남기기