1 팩키지 제작 이유

R 팩키지도 그렇지만, 파이썬 팩키지를 제작하는 이유는 재사용성(reuse)을 높이는 것이다. 그렇게 함으로써 복사하여 붙여넣기를 최소화할 수 있고 다른 사람들이 사용할 수 있도록 전달하는 기능도 부여할 수 있다.

1.1 스크립트, 모듈, 팩키지, 라이브러리

팩키지를 이해하기 위해서 팩키지와 혼용되어 사용되고 있는 다른 용어들에 대해 살펴보자.

  • 스크립트(script): python my_written_script.py 와 같이 실행될 수 있는 파이썬 코드

  • 팩키지(package): import 명령어로 가져오기 할 수 있는 파이썬 코드로 작성된 디렉토리

    • pandas, numpy, sklearn
  • 하위 팩키지(subpackage): 팩키지 내부의 더 작은 팩키지

    • pandas.DataFrame, numpy.random, sklearn.datasets, sklearn.model_selection
  • 모듈(module): 팩키지 내부 파이썬 코드로 다수 함수가 모인 .py 파일.

  • 라이브러리(Library): 팩키지 혹은 팩키지를 모아 놓은 팩키지 집합

    • 파이썬 표준 라이브러리(math, os 등)

2 스크립트 → 팩키지1

2.1 파이썬 스크립트

비만 기준 ’골드 스탠더드(gold standard)’로 체질량지수(BMI, Body Mass Index)를 많이 사용한다. 체중을 신장의 제곱으로 나눈값으로 BMI를 계산한다.

\[\text{체질량 지수} = \frac{체중}{신장^2}\] 상기 내용을 파이썬 스크립트로 작성하면 다음과 같다.

# BMI 계산
height = 170.5 * 0.01 
weight = 70.9
bmi = weight / height ** 2
print("BMI:", bmi)
BMI: 24.389195139360684

2.2 파이썬 함수

스크립트를 일반화시켜 이를 함수로 제작한다. 즉 변화하는 부분을 매개변수(parameter)로 처리하여 BMI를 계산하도록 코드를 제작한다.

# BMI 계산
def calc_bmi(height = 170.5, weight=70.9):
    height = height * 0.01 
    weight = weight
    bmi = weight / height ** 2
    print("BMI:", bmi)

calc_bmi(height = 170.5, weight=70.9)
BMI: 24.389195139360684

2.3 파이썬 바닐라 팩키지

사실 팩키지는 함수와 도움말 문서 덩어리로 이루어졌다. 우선 함수 문서 작성은 뒤로 일단 미루고 작성한 팩키지를 불러와서 활용하는 방식을 살펴보자.

먼저, 지금까지 작업한 결과는 다음과 같다. kbmi_dir 디렉토리 아래 팩키지를 알리는 __init__.py를 그냥 두고 __init__.py 파일 내부에는 어떤 코드도 있지 않음. calc_bmi() 함수는 bmi_module.py 파일에 작성되어 있다. bmi_script.py는 파이썬 팩키지와 아무 관련없으니 나중에 삭제하거나 다른 곳으로 옮겨 별도 관리할 예정이다.

tree kbmi_dir
kbmi_dir
├── __init__.py
├── bmi_module.py
└── bmi_script.py

0 directories, 3 files

팩키지가 된다는 것은 동일한 팩키지명을 갖는 디렉토리 구조를 만드는 것에서 시작된다. 그리고 setup.py를 넣게 되면 해당 팩키지에 포함된 함수를 끌어다 사용할 수 있게 된다.

tree kbmi
kbmi
├── kbmi
│   ├── __init__.py
│   ├── __pycache__
│   │   └── __init__.cpython-36.pyc
│   └── bmi_module.py
├── kbmi.egg-info
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   ├── dependency_links.txt
│   └── top_level.txt
└── setup.py

3 directories, 8 files

setup.py 파일을 다음과 같이 작성해서 코드가 담긴 kbmi 디렉토리 외부에 위치시킨다.

 kbmi/ <-- 팩키지 외부 디렉토리
|-- kbmi <--- 팩키지 내부 코드를 담고 있는 핵심 디렉토리
| |-- __init__.py
| |-- 
|-- setup.py <-- 팩키지임을 알리는 setup.py 스크립트
# 꼭 필요한 함수
from setuptools import setup
# setup 함수 호출
setup(
  author="Kwangchun Lee",
  description="A very simple package to calulate BMI", name="kbmi",
  version="0.1.0",
)

2.4 BMI 팩키지 설치

pip install -e . 명령어를 통해서 제작한 팩키지를 설치한다. 그전에 먼저 콘솔에서 다음 디렉토리 위치로 이동한다.

 kbmi/ <-- 콘솔에서 디렉토리 위치로 이동한다.
|-- kbmi
| |-- __init__.py
| |-- 
|-- setup.py

팩키지를 설치하게 되면 이제 로컬 컴퓨터에서 자체 개발한 팩키지를 불러 사용할 수 있게 된다.

(base) adminui-MacBookPro:kbmi kwangchunlee$ pip install -e .
Obtaining file:///Users/kwangchunlee/swc/sw4ds/kbmi
Installing collected packages: kbmi
  Running setup.py develop for kbmi
Successfully installed kbmi

2.5 BMI 팩키지 사용

numpy, pandas, sklearn 처럼 자체 제작한 kbmi 팩키지를 import 해서 사용해보자.

import kbmi

bmi_value = calc_bmi(170,70)
BMI: 24.221453287197235
print(bmi_value)
None
 

데이터 과학자 이광춘 저작

kwangchun.lee.7@gmail.com