본문 바로가기
Tech Stack/Python

모듈

by jaeaemin 2021. 8. 2.
모듈

 

모듈은 함수나 클래스 공용변수를 모아놓은 일종의 파일이다. 이러한 모듈을 만들어두면 다른 파이썬 프로그램이나 환경에서 불러와서 모듈 내에 선언된 내용을 사용가능하게 한다. 

 

예를 들어 덧셈과 뺄셈을 하는 함수를 가진 calc.py라는 모듈을 만들면 아래와 같을 것이다

 

# 파일명 : calc.py
def add(a , b)
     return a+b

def sub(a , b)
     return a-b

 

이런식으로 단순히 뺄셈과 덧셈의 함수를 가진 .py 확장자의 파이썬 파일도 모듈이라고 할 수 있다. 즉 모든 파이썬 확장자 파일은 모듈이 될 수 있다는 점이다.

 

 

이렇게 설정한 모듈을 불러오는 방법은 import를 사용하여 간단하게 불러올 수 있다. 만약에 파일이 같은 디렉터리 내에 위치하고 있다면

 

import calc

>>> print(calc.add(2.3))
5
>>> print(calc.sub(4,2))
2

 

이 때 import는 현재 디렉터리에 있는 파일이나, 파이썬 라이브러리가 저장된 디렉터리에 위치한 모듈을 불러 올 수 있게하는 명령어로 파이썬에서 기본 제공하는 라이브러리를 제외하고는 현재 디렉터리 내 위치해야 불러올 수 있다.

그리고 모듈이름을 지정할때 확장자는 제거한다.

 

이 떄, 자주 사용하는 모듈의 함수의 경우 콜할때 모듈이름을 붙이지 않고, 바로 해당 모듈의 함수를 사용하는 방법은 from을 사용하는 것이다.

 

from calc import add
> calc 모듈에 저장된 add 함수를 소스코드로 불러온다

from calc import *
> calc 모듈에 저장된 모든 내용을 현재 소스코드로 불러온다


>>> print(sub(4,2))        # 함수 앞에 모듈명을 붙이지 않아도 실행가능
2

 

 

그런데 여기서 .py 모듈파일에 함수나 클래스 뿐 아니라 실행 코드도 함께 있고 그 모듈을 불러온다면 어떻게 될까

예를 들어 calc.py 뒤에 print(add(1, 1)) 과 print(sub(2,1))을 추가한 뒤에 import를 해보자 

그러면 파일이 import되자마자 print문들이 실행되어 콘솔창에 출력되게 된다. 이러한 문제를 방지하기 위해 파이썬에서는 __name__, __main__ 변수를 사용한다

 

def add(a,b):
       return a+b

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

if __name__  ==  "__main__" :
     print(add(1,2))
     print(sub(2,1))

 

이때  __main__ 은 현재 실행시킨 파일이 calc.py인지 아닌지 판단한다. 만약에 이 파일이 대화형 인터프리터나 다른 파일에서 참조하여 열린 경우 __name__ == "__main__"이 False가 되어 if 뒤에 문장이 실행되지 않는다.

 

이 때 __name__ 변수란 파이썬이 내부적으로 사용하는 특별한 변수 이름으로, 직접 파일이 열리게 되면 __name__ 변수에는 "__main__"이 할당되게 되지만,  다른 모듈로써 import를 통해 참조로 열린 경우 __name__ 변수에는 파이썬 모듈의 확장자를 제외한 파일명으로 예제에서는 "calc"이 할당되게 된다.

 

 

 

 

모듈 위치 지정

우리는 모듈을 import하기 위해서 참조될 모듈과 같은 위치에 파일이 있어야 참조가 가능했다. 이러한 방법대신 모듈을 sys 라이브러리를 통해 미리 지정하는 방법과 환경 변수를 사용하는 두가지 방법으로 미리 파일 위치를 선언할 수 있다.

 

 

1. sys 모듈 사용

sys.path는 파이썬 라이브러리가 설치되어 있는 디렉터리를 나타내며, 만약 파이썬 모듈이 이 디렉터리에 들어 있다면 모듈이 저장된 디렉터리 이동 없이 바로 사용 가능하다.

 

import sys

>>> sys.path
['', 'C:\\Windows\\SYSTEM32\\python37.zip', 'c:\\Python37\\DLLs', 'c:\\Python37\\lib', 'c:\\Python37', 'c:\\Python37\\lib\\site-packages']

>>> sys.path.append("C:/Documents/my_file")

 

 

 

2. 파이썬의 환경변수 PYTHONPATH에 디렉터리 위치를 추가 시키면 디렉터리의 모듈을 따로 선언할 필요 없이 import하여 사용할 수 있다. 이때 set 명령어를 사용해 추가한다.

 

C:\doit>set PYTHONPATH=C:\doit\mymod
C:\doit>python
>>> import mod2
>>> print(mod2.add(3,4))
7
반응형

'Tech Stack > Python' 카테고리의 다른 글

예외 처리  (0) 2021.08.06
패키지  (0) 2021.08.03
클래스  (0) 2021.07.30
입출력  (0) 2021.07.29
파일  (0) 2021.07.27