10. 모듈 & 패키지
10. 모듈 & 패키지
10-1. 모듈
필요한 것들 끼리 부품처럼 만들어진 파일
함수 정의나 클래스 등의 파이썬 코드들을 담고있는 파일(확장자 .py)
<사용예시> - 영화 티켓 판매 모듈 만들기
사람수에 따른 영화티켓 가격을 출력하는 함수들을 담고있는 모듈
위와 같이 'cinema_modile.py'라는 모듈파일을 생성했다. 모듈을 불러 와서 사용하려면 모듈파일과 같은 경로에 있거나 라이브러리들이 모여있는 폴더에 모듈파일이 있어야 한다.
<다양한 모듈 사용 방법들>
1)
<실행결과>
3명 가격은 30000원
2명 조조 가격은 12000원
2)
<실행결과>
3명 가격은 30000원
2명 조조 가격은 12000원
3)
<실행결과>
3명 가격은 30000원
4명 군인 가격은 20000원
4)
<실행결과>
3명 가격은 30000원
에러
5)
<실행결과>
4명 군인 가격은 20000원
10-2. 패키지
모듈들을 모아놓은 집합. 하나의 디렉토리에 여러 모듈 파일들을 가져다 놓은 것.
<사용예시> - 여행패키지 모듈들을 모아놓은 'travel' 패키지
* 필리핀 패키지
* 베트남 패키지
* travel 폴더 안에 두개의 패키지가 들어있다.
* 패키지 사용하기 - 파이썬 파일이 패키지와 같은 위치에 있어야 한다.
1)
- import 를 통해 'travel' 패키지의 'Philippine' 패키지를 불러온다.
- import 뒤에는 패키지나 모듈만 가능하고 클래스나 함수는 불가능 하다.
- 'trip_to' 라는 변수를 생성하고 'Philippine' 패키지 안의 'philippine_package' 클래스 객체를 생성한다.
- 'trip_to' 객체의 'detail()' 함수를 실행시킨다.
<실행결과>
필리핀 패키지 3박4일 50만원
2)
- from / import 를 통해서 'travel' 패키지 안의 'Philippine' 모듈의 'philippine_package' 클래스를 불러온다.
- from / import 뒤에는 클래스나 함수가 올 수 있다.
- 마찬가지로 'trip_to' 변수를 선언해서 'philippine_package' 클래스 객체를 생성한다. 1)과는 다르게 'philippine_package' 클래스를 바로 가져왔기 때문에 앞에 패키지나 모듈을 작성하지 않고 바로 사용이 가능하다.
- 'trip_to' 객체의 'detail()' 함수를 실행시킨다.
<실행결과>
필리핀 패키지 3박4일 50만원
3)
- from / import 를 통해서 'travel' 패키지의 'Vietnam' 모듈을 불러온다.
- 동일하게 'trip_to' 변수를 선언해서 'Vietnam' 모듈의 'Vietnam_package' 클래스 객체를 생성한다.
- 'trip_to' 객체의 'detail()' 함수를 실행시킨다.
<실행결과>
베트남 2박3일 패키지 40만원
10-3. __all__
'random' 이나 'math' 모듈등을 불러올 때는 'from random import *' 형식으로 불러왔었는데 여기서 ' *'은 해당 모듈의 전부를 불러온다는 뜻이었다.
<실행결과>
그러나 사용자가 만든 패키지를 만들 때 '*'을 사용하면 에러가 발생한다. 패키지를 만들때 사용자가 공개범위를 설정해 줄 수 있기 때문이다.
* 공개범위 설정하기
'__init__.py ' 파일을 'travel' 폴더 안에 만든다. '__init__.py' 파일 안에서 공개범위를 설정해 줄 수 있다.
'__all__' 에 공개해줄 범위를 정해주면 '*'을 사용했을 때 지정해준 범위내에서 작동하게 된다.
이렇게 '__init__.py' 파일을 만들어 주고 위의 코드를 다시 실행하면 정상적으로 동작을 한다.
<실행결과>
베트남 2박3일 패키지 40만원
이때 범위로 지정해준 'Vietnam' 이 아닌 'Philippine' 모듈을 불러오면 에러가 발생한다.
10-4. 모듈 직접 실행
모듈이 복잡한 경우 모듈이 잘 작동하는지 직접 실행해서 확인해 봐야 한다. 이때 모듈이 직접 실행되었는지, 외부에서 실행되었는지 구분할 수 있다.
* __name__ : 이미 선언되어있는 변수로 모듈의 이름이 자동으로 저장된다. 단 모듈이 직접 실행되면 '__main__' 이 저장되고 모듈이 외부에서 실행되면 모듈의 이름이 저장된다.
- 예시
test.py
<실행결과>
in
main.py
<실행결과>
out
__main__
test
이를 활용해서 모듈이 직접 실행되었는지, 외부에서 실행되었는지를 구별할 수 있다.
먼저 'Vietnam' 모듈에 다음의 코드를 추가해준다.
<실행결과>
모듈이 직접 실행됨
베트남 2박3일 패키지 40만원
'Vietnam' 모듈을 외부에서 불러와서 실행하면 else 부분이 실행된다.
<실행결과>
모듈이 외부에서 실행됨
베트남 2박3일 패키지 40만원
10-5. 패키지 모듈 위치
* inspect 모듈 : 패키지나 모듈의 위치를 알려준다.
import 로 'inspect' 모듈을 불러오고 'inspect' 모듈의 '.getfile()' 함수를 사용하면 모듈이나 패키지의 위치를 알 수 있다.
<실행결과>
/Users/Desktop/python_project/travel/__init__.py
/Users/Desktop/python_project/travel/Vietnam.py
/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/random.py
10-6. pip install
pip 로 이미 만들어진 패키지를 설치하여 사용할 수 있다.
파이썬을 활용하면서 이미 만들어진 패키지를 잘 활용하는 것도 매우 중요하다.
맥북에서 안되는 경우 'pip3' 이라고 입력하면 된다.
https://pypi.org : 이미 만들어진 패키지들을 볼 수 있다.
사용하려고 하는 패키지를 복사해서 파이썬 실행창에 붙여넣고 엔터를 누르면 설치된다.
pip list : 설치된 패키지들을 볼 수 있다.
pip show (패키지 이름) : 해당 패키지의 정보를 보여준다.
pip install __upgrade (패키지 이름) : 해당 패키지를 업그레이드 시켜준다.
pip uninstall (패키지 이름) : 해당 패키지를 삭제시킨다.

댓글
댓글 쓰기