모듈 (Module)

1. 모듈

모듈(Module)은 파이썬 코드를 논리적으로 묶어서 관리하고 사용할 수 있게 하는데, 보통 하나의 파이썬 .py 파일이 하나의 모듈이 된다. 모듈 안에는 함수, 클래스, 혹은 변수들이 정의될 수 있으며, 실행 코드를 포함할 수도 있다.

파이썬은 기본적으로 상당히 많은 표준 라이브러리 모듈들을 제공하고 있으며, 3rd Party에서도 많은 파이쎤 모듈들을 제공하고 있다. 이러한 모듈들을 사용하기 위해서는 모듈을 import하여 사용하면 되는데, import 문은 다음과 같이 하나 혹은 복수의 모듈을 불러들일 수 있다.

import 모듈1[, 모듈2[,... 모듈N]

예를 들어, 아래 예제는 표준 라이브러리 중 수학과 관련 함수들을 제공하는 math 모듈을 import 하여 그 중 factorial() 함수를 사용하는 예이다.

import math
math.factorial(5)

하나의 모듈 안에는 여러 함수들이 존재할 수 있는데, 이 중 하나의 함수만을 불러 사용하기 위해서는 아래와 같이 "from 모듈명 import 함수명" 을 사용할 수 있다. 이렇게 from...import... 방식으로 import 된 함수는 호출시 "모듈명.함수명"이 아니라 직접 "함수명" 만을 사용할 수 있다.

# factorial 함수만 import
from math import factorial  

n = factorial(5) / factorial(3)

하나의 모듈 안에는 있는 여러 함수를 사용하기 위해 from... import (함수1, 함수2) 와 같이 import 뒤에 사용할 함수를 나열할 수 있다. 또한, 모든 함수를 불러 사용하기 위해서는 "from 모듈명 import *" 와 같이 asterisk(*)를 사용할 수 있다. 이렇게 from...import... 방식으로 import 된 함수는 호출시 모듈명 없이 직접 "함수명" 만을 사용할 수 있다.

# 여러 함수를 import
from math import (factorial,acos)
n = factorial(3) + acos(1)

# 모든 함수를 import
from math import *
n = math.sqrt(5) + math.fabs(-12.5) 

함수의 이름이 길거나 어떤 필요에 의해 함수의 이름에 Alias를 주고 싶은 경우가 있는데, 이 때는 아래와 같이 "함수 as Alias" 와 같은 표현을 사용할 수 있다.

# factorial() 함수를 f()로 사용 가능
from math import factorial as f
n = f(5) / f(3)

2. 모듈의 위치

파이썬에서 모듈을 import 하면 그 모듈을 찾기 위해 다음과 같은 경로를 순서대로 검색한다.

  1. 현재 디렉토리
  2. 환경변수 PYTHONPATH에 지정된 경로
  3. Python이 설치된 경로 및 그 밑의 라이브러리 경로

모듈의 실제 검색 경로는 sys.path 를 체크하면 쉽게 알 수 있으며, 만약 sys.path에 새 경로를 추가하면, 추가된 경로도 검색 경로에 포함된다 (sys는 파이썬의 시스템 모듈이다).

3. 모듈의 작성

프로그램을 모듈로 나누어 코딩하고 관리하는 것은 종종 많은 잇점이 있다. 사용자 함수 혹은 클래스를 묶어 모듈화하고, 이를 불러 사용하는 방법을 간략히 살펴보자. 우선 아래 두 개의 함수(add와 substract)를 mylib.py 라는 모듈에 저장한다.

# mylib.py
def add(a, b):
	return a + b

def substract(a, b):
	return a - b

모듈 mylib.py가 있는 디렉토리에서 그 모듈을 import 한 후, mylib의 함수들을 사용한다.

# exec.py
from mylib import *

i = add(10,20)
i = substract(20,5)

파이썬 모듈 .py 파일은 import 하여 사용할 수도 있고, 스크립트 전체를 실행할 수도 있다. 파이썬에서 하나의 모듈을 import 하여 사용할 때와 스크립트 전체를 실행할 때를 동시에 지원하기 위하여 흔히 모듈 안에서 __name__ 을 체크하곤 한다. 파이썬에서 모듈로 import해서 사용할 경우 그 모듈 안의 __name__ 은 해당 모듈의 이름이 되며, "python3.5 run.py"와 같이 스크립트를 실행할 때 모듈 안의 __name__ 은 __main__ 이 된다.

# run.py
import sys
def openurl(url):
	#..본문생략..
	print(url)

if __name__ == '__main__':
	openurl(sys.argv[1])	

아래와 같이 스크립트 실행시 "if __name__ ..." 문이 참이 되어 openurl(sys.argv[1]) 가 실행된다.

$ python3.5 run.py google.com
google.com

스크립트를 import할 때는 "if __name__ ..." 문이 거짓이 되어 함수 정의만 import 되어, 아래와 같이 openurl() 함수를 호출하여 사용할 수 있다.

$ python3.5 
>>> from run import *
>>> openurl('google.com')
본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.