본문 바로가기
카테고리 없음

Python - Module과 Package

by 왕거 2020. 7. 23.

파이썬에서 사용되는 모듈과 패키지에 관하여 정리한다.

 

모듈과 패키지 모두 지칭하는 단어만 다를 뿐이지 다른 언어들에 모두 존재하는 개념인 것 같다.

 

Module

  • 다른 언어와 비슷하게 main모듈로 사용할 목적인 모듈에서 다른 모듈들을 import 하여 사용한다.
# main.py
import test

print(test.large_check(10, 5))

#################################

from test import large_check	#다른 import 방법

print(large_check(10, 5))	#어떤 모듈의 함수인지 알려줄 필요가 없다.
# test.py
def large_check(num1, num2):
    if num1 < num2:
        res = num2
    elif num1 > num2:
        res = num1
    else:
        res = "같음"

    return res
  • import 방법
    • 기본적으로는 import하려는 모듈의 이름만 적어주면 된다.
      • 이 경우에는 해당 모듈의 함수나 변수를 사용하려면 <모듈이름> + <.> + <함수 또는 변수 이름> 의 방식을 사용해서 접근한다.
    • 모듈 내부의 함수나 변수만 import하는 것도 가능한데 main.py 소스의 아래쪽 부분의 import문이 사용법
      • from + <모듈 이름> + import + <*> 를 사용하면 해당 모듈 내부의 모든 요소를 사용할 수 있지만 동일한 이름을 가진 함수나 변수가 존재한다면 각각의 scope가 침해받을 위험성이 있기 때문에 권장되지 않음
    • import as
      • 하나가 아닌 여러 모듈을 import 할 때 함수나 변수 이름이 충돌하는 경우 또는 너무 길거나 복잡해서 사용하기 어려울 경우에 해당된 요소의 이름을 직접 지정해 줄 수 있다.
      • 모듈에도 동일하게 적용할 수 있다.
      • from + <모듈 이름> + import + <함수 또는 변수> + as + <이름 지정> 
# main.py
from test import large_check as f1	#함수에 import as 사용

print(f1(10, 5))

#####################################

import test as m1	#모듈에 import as 사용

print(m1.large_check(10, 5))

 

 

Package

  • 단순한 파이썬 파일이라고 볼 수 있는 모듈과는 다르게 패키지는 좀 더 큰 개념으로 여러 파이썬 파일들이 있는 디렉토리를 패키지라고 말한다.
  • 패키지 또한 모듈처럼 import하여 사용한다.
# main.py
import test_pack

print(test_pack.add(10, 5))
print(test_pack.multi(10, 2))

###################################
# 실행 결과
15
20
# add.py
def add(num1, num2):
    return num1 + num2
# multiply.py
def multi(num1, num2):
    return num1 * num2

테스트 디렉토리 구성

  • 원래는 패키지의 모듈을 사용할 때에는 <패키지 이름> + <.> + <모듈 이름> + <.> + <함수 또는 변수 이름> 의 방법을 사용해야 하나, __init__.py 파일에 몇몇 코드를 추가해주면 예제처럼 패키지 속 모듈의 함수 또는 변수에 접근 가능하다.
# __init__.py
from .add import add
from .multiply import multi
  • __init__.py의 역할은 해당 디렉토리를 패키지라고 인식시키는 것과 import시 사용할 경로를 줄여주는 것, 그리고 접근할 수 있는 요소를 제한할 수 있다.
    • 첫번째 기능은 빈 파일이어도 문제없이 작동한다.
    • 두번째 기능은 위 코드에 적은 것처럼 미리 import문을 적어 놓는 방법으로 이용할 수 있다.
    • 세번째 기능은 __all__ 이라는 요소를 __init__.py 안에 적는 것으로 이용하는데 __all__을 적지 않을 경우에는 하위 모듈의 모든 요소에 대한 접근을 허용한다는 의미이고, 모듈속의 요소를 리스트의 형식으로 지정해주면 지정한 요소에만 접근이 가능하게 할 수 있다.