모듈과 패키지
1. 모듈(Module)
모듈이란 클래스나 함수, 변수를 다른 파일(.py)에 작성하여 다른 파이썬 코드에서 재사용할 수 있도록 한 것입니다.
모듈은 한 번 작성한 코드를 여러 프로젝트나 여러 곳에서 사용할 수 있기 때문에 재사용성이 높고, 유지보수하기도 쉽습니다. 또한 모듈은 자체의 네임스페이스를 갖기 때문에, 모듈간에 같은 변수가 있다고 하더라도 충돌 없이 코드를 구조화 할 수 있습니다.
파이썬은 import 를 활용하여 모듈을 불러올 수 있습니다.
위 예시에서는 numpy라고 하는 모듈을 불러와 행렬의 연산을 쉽게 한 것을 볼 수 있습니다. 이를 기본 파이썬으로 구현하고자 하면 아래와 같이 복잡한 코드가 필요합니다.
직관적이지도 않으며, 출력결과 또한 만족스럽지 못합니다. 바퀴를 다시 발명하지 마라(Don't reinvent the wheel)라는 유명한 프로그래밍 격언이 있습니다.
여러분이 이러한 코드를 모듈 없이 직접 구현했다면 라이브러리가 존재한다는 것을 모르거나, 출력 결과가 원하던 결과와 조금 다르거나, 직접 개발해보고 싶어서 개발했을 수 있습니다.
다만 이미 있는 것을 다시 만드는 것은 단지 개인의 시간을 낭비하는 개인적인 차원을 넘어서서 유지보수와 안정성을 떨어트리게 됩니다. 모든 경우에 합당하진 않겠지만, 만약 직접 구현해야 한다면 다시 한 번 고민해보시길 바랍니다.
numpy만 하더라도 수천명의 개발자가 함께 개발한 검증된 모듈입니다.
GitHub - numpy/numpy GitHub - pandas2. 모듈의 설치와 확인
파이썬에서 제공하는, 혹은 제 3자(Third Party)에서 제공해주는 모듈을 다운로드 받아 설치하여 이용할 수 있습니다. colab에서는 자주 이용되는 수많은 모듈이 설치되어 있습니다. 아래 명령어를 통해 현재 컴퓨터에 설치된 패키지(모듈의 집합)를 확인할 수 있습니다. 단, colab에서 실행할 경우 여러분 컴퓨터가 아닌 클라우드 상에 설치된 모듈을 보여줍니다.
!pip list
!pip list
Package Version
-------------------------------- ---------------------
absl-py 1.4.0
aiohttp 3.8.5
aiosignal 1.3.1
alabaster 0.7.13
albumentations 1.3.1
... 생략 ...
beautifulsoup4 4.11.2
Package Version
-------------------------------- ---------------------
absl-py 1.4.0
aiohttp 3.8.5
aiosignal 1.3.1
alabaster 0.7.13
albumentations 1.3.1
... 생략 ...
beautifulsoup4 4.11.2
여기서 beautifulsoup4와 같은 모듈은 컴퓨터에 파이썬을 설치했을 때 기본적으로 설치되는 모듈이 아닙니다. colab에는 이런 것들을 설치 없이 사용할 수 있게 한 것이죠. 컴퓨터에서는 쉘 창을 열어 아래와 같이 입력해야 합니다.
pip intall beautifulsoup4
pip intall beautifulsoup4
단, colab에서도 깔려있지 않은 패키지를 사용해야 할 때에는 아래와 같이 사용해야 합니다.
!pip install 패키지_이름
!pip install 패키지_이름
때에 따라서는 pip이 아니라 pip3를 사용해야 할 수 있습니다. pip은 python 2.x 버전부터 사용되어온 패키지 관리 도구입니다. pip3는 python 3.x 버전용 패키지 관리 도구입니다.
이렇게 설치된 모듈은 아래와 같은 형식으로 불러올 수 있습니다.
import 패키지이름
import 패키지이름
아래 코드를 통해 기본 모듈을 불러오는 곳을 출력할 수 있습니다. 특별히 site-packages 폴더에는 pip로 설치한 패키지들이 들어가 있습니다. 여러분들이 만든 모듈도 이 폴더 안에 넣으면 어느 곳에서든 사용할 수 있게 됩니다. (가상환경의 경우에는 /Lib/site-packages 폴더입니다.)
import sys
sys.path
import sys
sys.path
아래와 같이 다양하게 사용할 수 있습니다. 기본적으로 다른 곳에서 가져온다는 것에서 동일한 기능을 합니다.
import 모듈1
import 모듈2, 모듈3
import 모듈4 as 별칭
from 폴더_또는_파일이름(모듈) import 파일_또는_변수명
from 폴더_또는_파일이름(모듈) import 변수 as 별칭2
모듈1.변수
모듈1.함수()
모듈1.클래스()
별칭.변수
별칭.함수()
import 모듈1
import 모듈2, 모듈3
import 모듈4 as 별칭
from 폴더_또는_파일이름(모듈) import 파일_또는_변수명
from 폴더_또는_파일이름(모듈) import 변수 as 별칭2
모듈1.변수
모듈1.함수()
모듈1.클래스()
별칭.변수
별칭.함수()
우리가 colab에서 모듈을 직접 만들어 이 모듈들이 어떻게 불러와 지는지 확인해보도록 하겠습니다.
colab에 좌측에 있는 폴더를 클릭하시고 마우스 우클릭으로 jun.py라는 새파일을 만들어주세요. 새 파일은 더블클릭하면 우측에 나옵니다.
여기에 아래와 같이 입력해주세요.
name = 'licat'
age = 10
def introduce():
print('hello world')
name = 'licat'
age = 10
def introduce():
print('hello world')
Ctrl + S를 눌러 한 번 저장한 다음 코드에 아래와 같이 출력해보세요.
from jun import name, age, introduce
name
age
introduce()
from jun import name, age, introduce
name
age
introduce()
위처럼 from을 사용하여 출력하는 방법도 있지만 보통 import을 많이 사용합니다.
import jun as j
# from jun import name
j.name
import jun as j
# from jun import name
j.name
간단한 모듈을 import해보는 예제를 작성해보도록 하겠습니다.
2 #실행할 때 마다 다른 수가 나옵니다
60 #실행할 때 마다 다른 수가 나옵니다
2 #실행할 때 마다 다른 수가 나옵니다
60 #실행할 때 마다 다른 수가 나옵니다
random안에 있는 randint와 choice라는 메서드를 사용해보았습니다.
파이썬은 타 언어에 비해 큰 생태계를 자랑합니다. 자주 사용되는 모듈들 목록을 검색해보시는 것만으로도 어떤 바퀴들이 발명되었는지 확인할 수 있는 좋은 공부가 됩니다.
2. 패키지
- 모듈(module) : 변수, 함수, 클래스를 담고 있는 파일
- 패키지(package) : 여러 모듈을 묶은 집합
파이썬에서 패키지란 여러 모듈을 묶은 파일이나 폴더로, 모듈들을 관리하는 데 도움을 줍니다. 패키지를 사용하면 모듈들을 보다 체계적으로 관리할 수 있고, 이를 통해 프로그램을 보다 쉽게 확장할 수 있습니다.
패키지를 만들어보는 방법을 예시를 통해 알아보겠습니다. 앞서 작업했던 contents 폴더에 operation이라는 폴더를 만들어주세요.
이 폴더 안에 2개의 파일을 만듭니다. arithmetic_operation.py파일과 logical_operation.py파일입니다. 2.x나 3.3미만 버전에서는 폴더 바로 아래 __init__.py
파일을 만들어야 하는데 3.3 버전 이상부터는 이 파일이 없어도 패키지로 인식하기 때문에 파일은 만들지 않도록 하겠습니다.
이제 이 파일 안에 함수나 클래스를 정의해줍니다. 아래와 같은 코드를 입력해보겠습니다.
# operation > arithmetic_operation.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
def mul(a, b):
return a * b
def div(a, b):
return a / b
# operation > logical_operation.py
def _and(a, b):
return a and b
def _or(a, b):
return a or b
# operation > arithmetic_operation.py
def add(a, b):
return a + b
def sub(a, b):
return a - b
def mul(a, b):
return a * b
def div(a, b):
return a / b
# operation > logical_operation.py
def _and(a, b):
return a and b
def _or(a, b):
return a or b
이제 패키지를 사용해보겠습니다. 사용 가능한 형식 2개를 넣어두었습니다. 둘 다 많이 사용하는 형태입니다.
from operation import arithmetic_operation as ao, logical_operation as lo
# import operation.arithmetic_operation # 둘 다 사용 가능합니다.
ao.add(3, 4)
from operation import arithmetic_operation as ao, logical_operation as lo
# import operation.arithmetic_operation # 둘 다 사용 가능합니다.
ao.add(3, 4)
위와 같이 패키지와 모듈을 from ~ import ~
하여 더욱 간단하게 함수를 호출할 수 있습니다.
이와 같이, 패키지를 만들고 사용하는 방법을 알아보았습니다. 패키지를 사용하면 모듈들을 보다 체계적으로 관리할 수 있어 프로그램을 보다 쉽게 확장할 수 있으며 유지보수를 쉽게 할 수 있습니다.