[Python 기초] 파이썬 프로그래밍의 핵심 - 모듈(Module)

업데이트:

개요

jpg

모듈(module)이란?

모듈(module)이란 함수나 변수 또는 클래스 들을 모아 놓은 파일이다.
다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만들어진 파이썬 파일이라고도 할 수 있다.

앞서 포스팅 했던, 클래스(Class)함수변수들을 모아 놓을 수 있는 공간이라고 했었다.

모듈은 이들을 모두 포함 할 수 있는 상위의 개념이라고 생각하면 쉽다.


1. 모듈 만들고 불러보기

# mod1.py
def sum(a,b):
    return a + b

간단히 sum함수를 정의하고 이를 mod1.py라는 파일명으로 저장했다.
mod1.py가 바로 모듈이다.

import mod1
print(mod1.sum(3,4))
[Output] 7

모듈을 import해서 불러오기 위해서는 작업공간이 mod1.py모듈이 저장된 디렉토리로 이동해야 가능하다.
즉, import 모듈이름은 현재 디렉터리에 있는 파일이나 파이썬 라이브러리가 저장된 디렉터리에 있는 모듈만 불러올 수 있다.
또한 mod1.pysum함수를 이용하기 위해서는 mod1.sum의 형태로 도트연산자를 이용해야 한다.

# mod1.py에 함수 추가
def safe_sum(a,b):
    if type(a) != type(b):
        print("더할수 있는 것이 아닙니다.")
        return
    else:
        result = sum(a,b)
    return result
    

mod1.py파일에 함수를 추가해 보았다.
else문에 sum함수가 들어가게 만들어서 자료형(type)이 같을 경우 실행되게 하는 재귀호출 함수의 형태라고 볼 수 있다.

import mod1

모듈 불러오기

print(mod1.safe_sum(3,4))
print(mod1.safe_sum(1,'a'))
[Output]
7
더할수 있는 것이 아닙니다.
None

실행결과 None이 나오는 이유는 if문에 단독으로 사용된 return에 의해 반환된 것이다.


2. 모듈을 불러오는 다양한 방법

2-1. 해당 모듈의 함수자체를 불러오기

때로는 mod1.sum보다 바로 sum함수로 간편하게 사용하고 싶을 수 있다.

이럴때는 모듈을 불러올때

from 모듈이름 import 모듈함수

위와 같이 불러오면 된다.

from mod1 import sum
sum(3,4)
[Output] 7

이와 같이 mod1.py모듈에서 sum함수만 불러와 사용한 경우이다.

2-2. 해당 모듈의 여러 함수를 불러오기

여러 함수를 불러오고 싶을때는 단지 ,로 여러 함수를 입력해 주면 된다.

from mod1 import sum, safe_sum
safe_sum(1,'아')
[Output] 더할수 있는 것이 아닙니다.

2-3. 해당 모듈의 모든 함수를 불러오기

from mod1 import *

위와 같이 *를 입력하면 해당 모듈의 모든 함수를 import할 수 있다.
참고로 *는 ‘모든 것’이라는 의미로 나중에 포스팅 정규표현식 중 하나이다.


3. if __name__ == “__main__”: 의 의미

# mod1.py에 추가
print(safe_sum('a',1))
print(safe_sum(1,4))
print(sum(10,10.4))

mod1.py파일의 마지막에 위와 같이 추가해보자.
그 후 커맨드창에서 모듈을 실행해 보자.

png

실행해보면 마지막에 추가했던 print로 출력된 것을 볼 수 있다.

그런데 대화형 인터프리터에서 mod1.py모듈을 사용하려고 import했을때 문제가 발생한다.

jpg

위와 같이 mod1.py모듈을 불러와 함수를 사용하려고 했을 뿐인데 자동으로 실행되어 결과값을 출력해버린다.

이럴때 마지막 부분을 다음과 같이 수정해보자.

if `__name__` == "`__main__`":
    print(safe_sum('a',1))
    print(safe_sum(1,4))
    print(sum(10,10.4))

그러면 파일을 직접 실행시켰을때는 __name__ == “__main__“이 참이 되어 if문 다음 문장(print)들을 수행한다. 하지만 대화형 인터프리터나 다른 파일에서 모듈을 import해 사용할때는 위 조건문이 거짓이되어 수행하지 않게 된다.

jpg

위와 같이 말이다!


4. 클래스나 변수 등을 포함한 모듈

이번엔 함수 뿐아니라 클래스와 변수를 포함한 모듈을 만들어보자.

# mod2.py
PI = 3.141592
class Math:
    def solv(self, r):
        return PI * (r**2)
    def sum(self,a,b):
        return a + b
    
if __name__ == "__main__":
    print(PI)
    a = Math()
    print(a.solv(2))
    print(a.sum(PI,4.4))

이 파일은 반지름을 계산하는 Math클래스와 두 값을 더하는 sum함수, 그리고 원주율 값인 PI변수를 포함하고 있다.

먼저 이 mod2.py를 직접 실행해보자.

png

그러면 __name__ == “__main__“이 참이 되어 마지막 부분들을 수행한다.

이제 대화형 인터프리터에서 모듈을 import해서 모듈 내에 포함된 것들을 사용해보자.

모듈 불러오기

import mod2

모듈 내 변수 불러오기

mod2.PI
[Output] 3.141592

클래스를 이용해 함수 사용하기

a = mod2.Math()
print(a.solv(2))
print(a.sum(mod2.PI,4.4))
[Output]
12.566368
7.5415920000000005

객체에 인스턴스 부여
solv함수 사용하기
sum함수로 원주율과 4.4 더하기

클래스 내의 함수들을 사용하는 과정이 잘 기억이 나지 않는다면 클래스(class)포스팅을 참고하자.


5. 모듈이 있는 디렉토리로 이동하지 않고 사용하는 방법

5-1. sys.path.append(모듈을 저장한 디렉터리) 사용하기

우선 mod2.py모듈을 해당 작업공간이 아닌 D:\Python에 옮겨놓자.
그러면 당연히 모듈을 import하는 것은 불가능하다.

sys 모듈은 파이썬을 설치할 때 함께 설치되는 라이브러리로, 이를 이용해 파이썬 라이브러리가 설치되어 있는 디렉터리를 확인할 수 있다.

import sys
sys.path
[Output]
['',
 'D:\\Anaconda3\\python36.zip',
 'D:\\Anaconda3\\DLLs',
 'D:\\Anaconda3\\lib',
 'D:\\Anaconda3',
 'D:\\Anaconda3\\lib\\site-packages',
 'D:\\Anaconda3\\lib\\site-packages\\win32',
 'D:\\Anaconda3\\lib\\site-packages\\win32\\lib',
 'D:\\Anaconda3\\lib\\site-packages\\Pythonwin',
 'D:\\Anaconda3\\lib\\site-packages\\IPython\\extensions',
 'C:\\Users\\user\\.ipython']

즉, 어떤 모듈이 이 경로안에 포함되어 있다면 디렉터리의 이동 없이 해당 모듈을 사용할 수 있다.

sys.path.append("D:\Python")

sys.path의 결과값이 리스트 자료형이므로 append함수를 이용해 경로를 추가해주면 된다.
append함수는 리스트 자료형 포스팅의 리스트 관련함수에서 언급했던 적이 있다.

sys.path
[Output]
['',
 'D:\\Anaconda3\\python36.zip',
 'D:\\Anaconda3\\DLLs',
 'D:\\Anaconda3\\lib',
 'D:\\Anaconda3',
 'D:\\Anaconda3\\lib\\site-packages',
 'D:\\Anaconda3\\lib\\site-packages\\win32',
 'D:\\Anaconda3\\lib\\site-packages\\win32\\lib',
 'D:\\Anaconda3\\lib\\site-packages\\Pythonwin',
 'D:\\Anaconda3\\lib\\site-packages\\IPython\\extensions',
 'C:\\Users\\user\\.ipython',
 'D:\\Python']

경로가 마지막에 추가되었음을 확인할 수 있다!

import mod2

그 후에는 mod2.py모듈이 현재 작업공간과 다른 D:\\python경로에 있지만 import해서 사용이 가능하다.


5-2. PYTHONPATH 환경 변수 이용하기

비슷한 방법으로 커맨드 창에 set PYTHONPATH=D:\\Python을 입력해 새로운 디렉터리를 설정해 주면, 별도의 작업 필요 없이 mod2.py모듈을 이용 할 수 있다.


Reference

도서 [점프 투 파이썬] 를 공부하며 작성하였습니다.

댓글남기기