본문 바로가기
학부 생활 + 랩실/Python

파이썬(7) - 패키지

by 프롭 2026. 4. 4.

 

Python Package

 

  • 모듈과 패키지란?

실제 개발 할 때는 다수의 파이썬 파일을 유기적으로 연결하고 남이 만든 코드도 적극 활용한다. 어떤 파이썬 파일에서 import키워드를 통해 외부 파이썬 파일의 함수, 변수, 클래스를 가져다 쓸 수 있다. 외부 코드는 기능별로 파일에 저장하는데 규모가 작으면 하나의 파일에, 규모가 크면 여러 파일에 구현 후 하나의 폴더에 담을 수도 있다. 이때 각각의 .py 파일을 모듈(Module)이라 하고 여러 모듈을 묶은 폴더를 패키지(package)라 한다. 파이썬의 오픈 소스들은 패키지 단위로 설치가 되기에 패키지라는 용어를 자주 쓴다.

 

  • 모듈 만들기

모듈은 단순 파이썬 파일이다. 특정 파이썬 파일에 함수와 변수를 만들고 이를 다른 파일에 가져다 쓸 수 있다.

# list_ops.py
def add(foo, bar):
    out = []
    for f, b in zip(foo, bar):
        out.append(f + b)
    return out

def subtract(foo, bar):
    out = []
    for f, b in zip(foo, bar):
        out.append(f - b)
    return out

def multiply(foo, bar):
    out = []
    for f, b in zip(foo, bar):
        out.append(f * b)
    return out

def divide(foo, bar):
    out = []
    for f, b in zip(foo, bar):
        out.append(f / b)
    return out

x = [51, 23]
y = [34, 67]

if __name__ == '__main__':
    z = add(x, y)
 

리스트 원소에 대한 사칙연산 함수 외에 x, y, z라는 변수를 만들었다.

 

  • 모듈 사용하기

list_ops.py를 가져다 만든 함수와 변수를 사용해보자. import를 활용해 외부 모듈을 가져오는 방법은 다양하다.

출력 :

[1, 2, 3, 4, 5] + [24, 52, 15, 24] = [25, 54, 18, 28]

[51, 23] * [34, 67] = [1734, 1541]

 

1. 모듈 이름 그대로 가져오기

외부 모듈에서 어떤 객체를 가져올 때 모듈명.객체명으로 가져오면 된다. 함수가 정상 작동하는 것을 확인 할 수 있다. 마지막 줄을 보면 import한 모듈에서 변수 또한 가져올 수 있다. 당연해보이지만 C언어나 다른 언어를 생각해보면 그렇지 않다.

list_ops.py에 실행 가능한 코드를 넣되 외부에서 import할 때 실행되지 않게 하고 싶다면 __name__변수를 써야한다. z라는 변수가 if__name__=='__main__':조건문 아래 있기 때문에 외부에서 import 할 때는 선언되지 않는다.

import list_ops

foo = [1, 2, 3, 4, 5]
bar = [24, 52, 15, 24]
goo = list_ops.add(foo, bar)
print(f"{foo} + {bar} = {goo}")

goo = list_ops.multiply(list_ops.x, list_ops.y)
print(f"{list_ops.x} * {list_ops.y} = {goo}")
 

 

2. 모듈 이름을 바꿔서 가져오기

모듈의 기능을 이해하기 쉽게 몇 단어를 이어 길게 짓는 것이 보통이다. 게다가 패키지에서 복잡한 폴더 구조 아래 있는 모듈을 가져올 때 import 문은 더욱 길어진다. 이때 모듈의 객체를 불러올 때마다 긴 모듈 이름을 쓰는 것은 번거로우므로 별명을 지을 수 있다. import A as B 와 같이 A 모듈을 B라는 별칭으로 사용 할 수 있는 것이다.

import list_ops as lo

foo = [1, 2, 3, 4, 5]
bar = [24, 52, 15, 24]
goo = lo.subtract(bar, foo)
print(f"{bar} - {foo} = {goo}")
goo = lo.divide(bar, foo)
print(f"{bar} / {foo} = {goo}")
 

출력 :

[24, 52, 15, 24] - [1, 2, 3, 4, 5] = [23, 50, 12, 20]

[24, 52, 15, 24] / [1, 2, 3, 4, 5] = [24.0, 26.0, 5.0, 6.0]

 

3. 모듈에서 지정한 객체만 가져오기

외부 모듈명을 쓰지 않고 바로 함수나 변수를 사용하고 싶을 때는 from module import object를 쓰면 된다. from을 써서 가져온 객체는 모듈명 생략이 가능하다.

from list_ops import add, subtract, x

foo = [1, 2, 3, 4, 5]
bar = [24, 52, 15, 24]
goo = add(foo, bar)
print(f"{foo} + {bar} = {goo}")
goo = subtract(bar, foo)
print(f"{bar} - {foo} = {goo}")
print(f"x= {spam}")
 

출력 :

[1, 2, 3, 4, 5] + [24, 52, 15, 24] = [25, 54, 18, 28]

[24, 52, 15, 24] - [1, 2, 3, 4, 5] = [23, 50, 12, 20]

x = [51, 23]

 

  • 패키지 만들기

패키지는 여러 모듈이 폴더 단위로 모인 것으로 폴더 안에 폴더를 넣어 계층적으로 만들 수도 있다. 이제 package란 폴더를 만들어 안에 위에서 만든 list_ops.py를 옮기고 dict_ops.py도 만들어 넣겠다.

# dict_ops.py
def add(foo, bar):
    out = {}
    for key in foo.keys():
        if key in bar:
            out[key] = foo[key] + bar[key]
    return out

def subtract(foo, bar):
    out = {}
    for key in foo.keys():
        if key in bar:
            out[key] = foo[key] - bar[key]
    return out

def multiply(foo, bar):
    out = {}
    for key in foo.keys():
        if key in bar:
            out[key] = foo[key] * bar[key]
    return out

def divide(foo, bar):
    out = {}
    for key in foo.keys():
        if key in bar:
            out[key] = foo[key] / bar[key]
    return out
 

이제 이 패키지를 불러오는 예제를 해보겠다. 키와 몸무게를 입력하여 BMI를 계산하는 코드다. 각각 별칭으로 불러오겠다.

import package.list_ops as lo
import package.dict_ops as do

weights = [55, 90, 55, 78]
heights = [1.63, 1.78, 1.59, 1.83]
heights_sq = lo.multiply(heights, heights)
bmi = lo.divide(weights, heights_sq)
print("BMI:", bmi)

names_weight = ["A", "B", "C", "D"]
names_height = ["B", "C", "D", "E"]
weights = dict(zip(names_weight , weights))
heights = dict(zip(names_height , heights))
print("dict weights:", weights)
print("dict heights:", heights)
heights_sq = do.multiply(heights, heights)
bmi = do.divide(weights, heights_sq)
print("BMI:", bmi)
 
 

출력 :

dict weights: {'A': 55, 'B': 90, 'C': 55, 'D': 78}

dict heights: {'B': 1.63, 'C': 1.78, 'D': 1.59, 'E': 1.83}

BMI: {'B': 33.87406375851557, 'C': 17.35891932836763, 'D': 30.853209920493647}

 

dict_ops는 입력 인자 foo, bar에 공통적으로 있는 key에 대해서만 연산을 수행한다.

 

'학부 생활 + 랩실 > Python' 카테고리의 다른 글

파이썬(9) - 유틸리티  (0) 2026.04.05
파이썬(8) - 클래스  (0) 2026.04.04
파이썬(6) - 함수  (0) 2026.04.04
파이썬(5) - 제어문  (0) 2026.04.03
파이썬(4) - 컨테이너(2) 딕셔너리, 튜플  (0) 2026.04.03