파이썬에서 사용되는 모듈과 패키지에 관하여 정리한다.
모듈과 패키지 모두 지칭하는 단어만 다를 뿐이지 다른 언어들에 모두 존재하는 개념인 것 같다.
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__을 적지 않을 경우에는 하위 모듈의 모든 요소에 대한 접근을 허용한다는 의미이고, 모듈속의 요소를 리스트의 형식으로 지정해주면 지정한 요소에만 접근이 가능하게 할 수 있다.