Python : 모듈(module) -> 패키지(package)

Jinsung·2021년 10월 23일
0

python

목록 보기
20/25
post-thumbnail
post-custom-banner

모듈 (Module)

모듈이란 함수나 변수 또는 클래스를 모아 놓은 파일

간단한 모듈 만들기

영화 가격 출력 모듈
module.py

# 영화 가격 설정
def price(people):
    print("{0}명 가격은 {1}원 입니다".format(people, people * 10000))

# 조조할인 가격
def price_morning(people):
    print("{0}명 가격은 {1}원 입니다".format(people, people * 6000))

# 군인 할인 가격
def price_soldier(people):
    print("{0}명 군인 가격은 {1}원 입니다".format(people, people * 4000))

모듈 불러오기

# 방법 1 : 모듈 통채로 불러오기
import module
module.price(3)
module.price_morning(4)

# 방법 2
import module as mv # module에 mv이라는 별명을 붙여서 사용
mv.price(3)
mv.price_morning(4)

# 방법 3
from module import * # 모두 호출
price(3)
price_morning(4)

# 방법 4
from module import price, price_morning # 필요한것만 호출
price(5)
price_morning(4)

# 방법 5
from module import price_soldier as price # 필요한걸 호출하고 별명을 준다
price(5) #군인 가격

패키지

패키지(Packages)는 도트(.)를 사용하여 파이썬 모듈을 계층적(디렉터리 구조)으로 관리할 수 있게 해준다. (패키지안에 모듈이 모아져있다고 생각하면 된다.)

패키지 파일 생성(package) 후 안에 일본, 타이완 여행 비용 모듈을 넣어둔다.
일본 여행 모듈 (japan.py)

class JapanPackage:
    def detail(self):
        print("[일본 패키지 3박 5일] 도쿄, 오사카 여행 (카지노 투어) 40만원")

타이완 여행 모듈 (thiland.py)

class ThailandPackage:
    def detail(self):
        print("[태국 패키지 3박 5일] 방콕, 파타야 여행 (야시장 투어) 50만원")

패키지 불러오기

#방법 1
import package.thailand #패키지
trip_to= package.thailand.ThailandPackage()
trip_to.detail()

#방법 2
import package.thailand.ThailandPackage #모듈을 직접 디렉터까지 직접 import
trip_to= package.thailand.ThailandPackage()
trip_to.detail()

# 방법 3
from package.thailand import ThailandPackage #패키지안에 함수를 직접 import하는 방식
trip_to = ThailandPackage()
trip_to.detail()

init 파일 용도

__init__.py 파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다. 만약 thailand, japan 등 패키지에 포함된 디렉터리에 __init__.py 파일이 없다면 패키지로 인식되지 않는다.

원래 random 함수 처럼 모두 불러올때
from random import * 로 모두 불러왔지만
내가 만든 패키지에 위 명령어 처럼 하면 밑에 코드 처럼 에러가 발생한다.

from package import * #패키지
trip_to= thailand.ThailandPackage()
trip_to.detail()

NameError: name 'thailand' is not defined

all

이렇게 특정 디렉터리의 모듈을 *를 사용하여 import할 때에는 다음과 같이 해당 디렉터리의 __init__.py 파일에 __all__ 변수를 설정하고 import할 수 있는 모듈을 정의해 주어야 한다.

init 파일에 밑에 코드 추가

__all__ = ["thailand"]

잘 작동하는걸 확인 할수 있다

from package import * #패키지
trip_to= thailand.ThailandPackage()
trip_to.detail()

[태국 패키지 3박 5일] 방콕, 파타야 여행 (야시장 투어) 50만원

여기서 일본도 추가 하고 싶으면 all배열에 추가면 된다.

__all__ = ["thailand", "japan"]

패키지 직접 실행

__name__ 이용

타이완 파일에 if문을 추가하여 확인가능하다

class ThailandPackage:
    def detail(self):
        print("[태국 패키지 3박 5일] 방콕, 파타야 여행 (야시장 투어) 50만원")

if __name__ == "__main__":
    print("모듈을 직접 실행")
    trip_to = ThailandPackage()
    trip_to.detail()
else:
    print("외부에서 모듈을 직접 호출")

패키지 모듈 위치 확인(inspect)

테스트로 random 패키지 위치 찾기

import inspect
import random
from package import *
print(inspect.getfile(random))
print(inspect.getfile(japan))


/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/random.py
외부에서 모듈을 직접 호출 # 위에 설정한 메세지 출력
/Users/admin/git/python-study/package/japan.py
post-custom-banner

0개의 댓글