본문 바로가기
Programming/Python

파이썬 패키지와 모듈

by DUSTIN KANG 2024. 1. 2.

Module

module(모듈)은 Python 코드를 포함하는 하나의 파일을 말합니다.

이 모듈을 다른 프로그램에서 불러와 사용할 수 있습니다. 파이썬에서 이식성이 좋은 이유는 모듈이 `.py`라는 확장자로 이루어져 있기 때문입니다. 자주 사용하는 모듈로는 `os, sys, math, datetime, random, JSON`등이 있습니다.

 

파이썬은 어떻게 모듈을 가져올까?

파이썬의 모듈은 `.py`으로 이루어진 하나의 파일이라고 했습니다. 그럼 우리가 프로그램을 만들 때 어떻게 파이썬 파일을 가져오게 되는 것일까요? 파이썬에서 모듈을 `import` 할 때 PYTHONPATH를 조회하게 됩니다. PYTHONPATH은 다음 코드로 확인할 수 있습니다.

import sys
sys.path

 

모듈이 담겨진 경로를 리스트를 통해 볼 수 있습니다. 파이썬이 리스트를 불러오는 순서는 다음 순서로 불러오게 됩니다.

  1. 절대 경로
  2. PYTHONPATH 환경변수
  3. 기타 경로

파이썬에서 모듈을 가져올 때 `import` 키워드를 사용합니다. 다양한 방식으로 모듈을 가져올 수 있습니다.

import numpy as np
from numpy import *

# from [모듈/패키지]
# import [변수, 함수, 클래스 / 모듈, 변수, 함수, 클래스]

파이썬의 다양한 모듈

os

os 모듈↗️은 운영체제에 관한 모듈입니다.

import os

# 파일 삭제
os.remove("move_to_bin.txt")

 

random

random 모듈↗은 임의의 숫자나 시퀀스를 반환하는 모듈입니다.

import random

random.seed(2024) # 시드 고정

print(random.random()) # 0.47009071843107064
lst = list(range(1, 11)) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
random.shuffle(lst) 
print(lst) # [1, 9, 10, 2, 3, 6, 8, 7, 4, 5]

print(random.randint(1, 11)) # 6
print(random.sample(lst, 5)) # [8, 4, 2, 10, 3]

 

더보기

이외 다양한 파이썬 내장 모듈

  1. math : 수학과 관련된 모듈 ex. log(), cos(), pi
  2. sys : 실행환경과 관련된 변수와 함수가 저장된 모듈 ex. sys.path , sys.path.append(’추가할 경로’)
  3. random : 랜덤한 값 만들 때 ex. randint(a, b), uniform(a, b)
  4. datetime : 날짜와 시간과 관련된 모듈 ex. datetime.datetime.now() , timedelta(), strftime("%Y년 %m월 %d일 %A")
  5. random : 랜덤한 값 만들 때 ex. randint(a, b), uniform(a, b)
  6. os.path : 파일 경로를 다룰 때 사용
  7. re : 정규 표현식으로 특정한 규칙/패턴을 가진 문자열을 표현하는데 사용
  8. pickle : 파이썬 객체를 바이트 형식으로 바꿔 파일을 저장하고 객체(오브젝트)를 불러올 수 있음.
  9. json : 오브젝트를 JSON 형식으로 바꿔줍니다.
  10. copy : 파이썬 오브젝트를 복사할 때 사용.
  11. sqlite3 : 파이썬에서 SQLite 데이터베이스를 사용

Packages

Package(패키지)는 특정 기능과 관련하여 여러 모듈들을 묶어놓은 집합을 말합니다.  일반적으로 하나의 패키지에는 모듈들의 namespace를 제공하며 `__init__.py`이라는 초기화 파일이 존재합니다. 

추가로, 패키지는 또다른 서브 패키지를 포함할 수도 있습니다.

 

그럼 Package의 모음은 무엇일까요? 패키지의 모음을 라이브러리(Library)라고 합니다. 주로 사용하는 파이썬 라이브러리는 `Numpy`, `Pandas`, `Matplotlib`등이 있습니다.

프레임워크와 라이브러리의 차이

Framework(프레임워크)는 원하는 기능 구현에 집중하여 개발할 수 있도록 기능과 형태를 갖추고 있는 뼈대를 말합니다. 

비슷하다고 느껴질 수 있을 것입니다. 그러나, 이 둘의 차이는 제어 흐름에 대한 주도성입니다. 즉, 전반적인 컨트롤을 누가 하느냐 입니다.

 

라이브러리는 사용자가 전반적인 흐름을 직접 주도합니다. 하지만 프레임워크는 이와 다르게 프레임워크가 흐름을 제어하고 그 안에서 코드를 사용하면 됩니다.

Inversion of Control(IoC)

Don't Call Us, we will call you.

 

제어의 역전(IoC)라는 의미는 외부 프레임워크가 제어의 흐름을 대신하는 것을 말합니다. 

제어의 역전은 의존성 관리가 쉽다는 장점이 있어 개발 시간을 단축시킬 수 있습니다. 스스로 하나하나 라이브러리를 맞춰가는 것보다 프레임워크를 사용하는 것이 개발 시간을 단축하기 때문에 이점이라고 볼 수 있습니다. 하지만 의존성 주입(DI)이 많이질 수록 복잡성 또는 가독성에 문제가 생길 수 있습니다.  자세한 내용은 디자인 패턴 파트에서 다루도록 하겠습니다.

 


☕️ 포스팅이 도움이 되었던 자료

오늘도 저의 포스트를 읽어주셔서 감사합니다.

설명이 부족하거나 이해하기 어렵거나 잘못된 부분이 있으면 부담없이 댓글로 남겨주시면 감사하겠습니다.