컴퓨터/Python
지난 포스트에서 까지는 패키지와 모듈을 하나의 의미로 다뤘습니다. 그리고 지금도 크게 차이는 없습니다.
모듈은 다양한 변수, 함수, 클래스 등을 담아두고 있습니다.
그리고 패키지는 다양한 모듈을 담고 있습니다.
다시 말해 패키지는 디렉터리(폴더)이며 모듈은 파일이 되는 것입니다.
대략적인 패키지와 모듈의 차이가 이해가 되시나요?
본 포스트에서는 패키지를 직접 만들고 사용해 보도록 하겠습니다.
위의 그림처럼 3가지 모듈을 만들어 보도록 하겠습니다.
각각의 소스코드를 살펴보도록 합시다.
#module1
def fun():
print("module 1")
#module2
def fun():
print("module 2")
#module3
def fun():
print("module 3")
#main
import module1
import module2
import module3
module1.fun()
module2.fun()
module3.fun()
결과는 각각의 모듈에서 함수를 불러와 다음과 같이 동작합니다.
기존에 배웠던 방법으로 쉽게 모듈을 불러왔습니다.
하지만 모듈을 수많이 불러와야 된다면 어떻게 해야 될까요?
또는 한 라이브러리 개발 회사의 4명의 개발자가 4종류의 모듈을 만들고 한 번에 배포를 해야 되면 어떻게 해야 될까요?
이외에도 수많은 모듈을 효율적으로 관리하기 위해서 패키지의 개념은 분명 필요합니다.
실제로 파이썬에서 사용하는 유명한 오픈소스 라이브러리들도 패키지화되어있습니다.
패키지화를 하려면 맨 위에서 소개한 것처럼 폴더의 구조를 만들어 주면 됩니다.
다만, __init__. py라는 녀석을 같이 포함해 주어야 됩니다.
__init__. py는 패키지의 정보를 알려주는 역할을 하므로 반듯이 존재해야 합니다.
현재 __init__. py에는 아무것도 없는 상태입니다.
이 상태에서 main.py에 패키지를 추가해보도록 하겠습니다.
Packge는 추가했지만 Packge.으로 내부에 있는 모듈에 접근할 수 없는 것을 확인했습니다.
아직 __init__. py에 아무 정보도 없기 때문입니다.
이 상태에서 Packge안의 모듈을 사용하려면 어떻게 해야 될까요?
import Packge.module1
import Packge.module2
import Packge.module3
Packge.module1.fun()
Packge.module2.fun()
Packge.module3.fun()
또는
from Packge import module2, module3, module1
module1.fun()
module2.fun()
module3.fun()
이런 식으로 패키지 안의 각각의 모듈에 접근할 수 있습니다.
패키지 안의 각각의 모듈을 따로 사용하는 것도 가능하다는 것을 알 수 있게 됩니다.
하지만 이런식으로 사용하면 각각의 모듈을 사용하는 것과 별반 차이가 없습니다. 오히려 타이핑 수만 늘어나는 거 같기도 합니다.
이제 __init__. py를 수정하여 한번에 불러오는 방법을 알아보도록 하겠습니다.
현재의 목적은 패키지만 import 했을 때 모든 모듈을 사용하고 싶다고 가정합시다.
이때 __init__. py에 다음과 같은 설정을 하면 됩니다.
#__init__.py
__all__ = ["module1","module2","module3"]
또는, 조금 더 익숙한 방법으로 쓰자면
#__init__.py
from Packge import module1
from Packge import module2
from Packge import module3
또는 현재 위치를 의미하는.으로도 가능합니다.
#__init__.py
from . import module1
from . import module2
from . import module3
다시 main.py에서 소스코드를 작성하면
그림처럼 이제 Packge만을 import해도 모듈들을 불러서 사용할 수 있게 됩니다.
이제 앞으로 배워올 다양한 오픈소스 패키지, 모듈들을 활용할 때 해당 내용에 대해서 이해를 하면 조금 라이브러리의 구조를 파악할 수 있게 될 것입니다.
Python - Request 2 (Get 과 Post 처리) (0) | 2022.02.24 |
---|---|
Python - Request 패키지 (Http 관련 모듈) (0) | 2022.02.23 |
Python - 모듈 관리 (pip란?) (0) | 2022.01.21 |
Python - Module (라이브러리) (0) | 2022.01.20 |
Python - class 상속 (0) | 2022.01.19 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet