모듈

모듈은 한 개의 완성된 프로그램이다. 파이썬에서 모듈은 하나의 .py 파일이다. 모듈을 사용하는 이유는 프로그램 기능별로 파일을 나누어서 유지보수 등 관리를 편하게 하기 위해서이다.

내장 모듈 사용하기

내장모듈은 파이썬을 설치할 때 자동으로 설치되는 모듈이다.

파이썬에 기본적으로 내장된 모듈은 아래와 같이 사용하면 된다.

import 모듈이름
모듈이름.변수
모듈이름.함수()

import math
print(math.pi)
print(math.ceil(5.7))  # 올림 함수

외부 모듈 사용하기

외부모듈은 다른 사람이 만든 파이썬 파일을 pip로 설치해서 사용하는 모듈이다.

파이썬 외부 모듈을 사용하려면 pip을 사용해야 한다.

pip install 모듈이름

모듈 만들기

모듈을 만들고 해당 모듈을 불러서 사용하면 pycache 파일이 생기는데 컴파일 속도 향상을 위해 생기는 파일이기 때문에 신경쓰지 않아도 된다.

아래처럼 mymodule.py 파일 안에 커스텀 모듈을 만들어 본다.

# mymodule.py
version = 2.0

def print_author():
    print('SYJ')

class Pay:
    def __init__(self, id, price, time):
        self.id = id
        self.price = price
        self.time = time

    def get_pay_info(self):
        return f"{self.id}{self.price}{self.time}"

# 지금 이 파일을 직접 실행했을 때만 아래의 print 문을 실행
if __name__ == "__main__":
    print('mymodule 실행')
 
print(__name__)

결과: __main__

이제 만든 모듈은 아래와 같이 사용하면 된다.

import mymodule

print(mymodule.version)

mymodule.print_author()

test = mymodule.Pay('dijf', 123, 'eijglks')
print(test.get_pay_info())

# 다른 파일에서 __name__은 mymodule
print(mymodule.__name__)

패키지

패키지는 관련 있는 모듈들을 하나의 폴더로 구성해 놓은 것이다.

패키지 만들기

먼저 아래의 폴더 구조와 같이 패키지 및 모듈을 만들었다.

image

unit 패키지 안에 charater, item, monster 모듈이 들어있다.

# character.py
def test():
    print('character module')
# item.py
def test():
    print('item module')
# monster.py
def test():
    print('monster module')

패키지를 불러오는 방법은 다음과 같이 4가지가 있다.

# main.py 

# 1. import 패키지. 모듈
import unit.character
unit.character.test()

# 2. from 패키지 import 모듈
from unit import item
item.test()

# 3. from 패키지 import *  -->  __init__ 모듈 세팅 필요
from unit import *
character.test()
item.test()
monster.test()

# 4. import 패키지  -->  __init__ 모듈 세팅 필요
import unit
unit.character.test()
unit.item.test()
unit.monster.test()

이때 3,4 번과 같이 패키지를 사용하려면 init 파일을 아래와 같이 정의해줘야 한다.

# __init__.py
from . import character, item, monster

init.py 파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다. 다시말해 파이썬이 init.py 파일을 포함하는 디렉토리를 module로 취급하게 한다.

python3.3 버전부터는 init.py 파일이 없어도 패키지로 인식하지만 하위 버전 호환을 위해 init.py 파일을 생성하는 것이 안전한 방법이다.