모듈

honeyricecake·2022년 6월 30일
0

파이썬

목록 보기
18/26

모듈이란 함수나 변수 또는 클래스를 모아 놓은 파일이다.
모듈은 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 파이썬 파일이라고도 할 수 있다.
우리는 파이썬으로 프로그래밍을 할 때 굉장히 많은 모듈을 사용한다.
다른 사람이 이미 만들어 놓은 모듈을 사용할 수도 있고 우리가 직접 만들어서 사용할 수도 있다. 여기에서는 모듈을 어떻게 만들고 사용할 수 있는지 알아보겠다.

모듈 만들기

모듈에 대해 자세히 살펴보기 전에 간단한 모듈을 한번 만들어 보자.

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

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

위와 같이 add와 sub함수만 있는 파일 mod1.py를 만들고 C:\doit디렉터리에 저장하자. 이 mod1.py 파일이 바로 묘듈이다. 지금까지 에디터로 만들어 온 파일과 다르지 않다.

(파이썬 확장자 .py로 만든 파이썬 파일은 모두 모듈이다.)

모듈 불러오기

우리가 만든 mod1.py파일 즉, 모듈을 파이썬에서 불러와 사용하려면 어떻게 해야할까?

import mod1
print(mod1.add(3,4))
print(mod1.sub(4,2))

mod1.py를 불러오기 위해 import mod1 이라고 입력하였다.
실수로 import mod1.py 로 입력하지 않도록 주의하자.

import는 이미 만들어 놓은 파이썬 모듈을 사용할 수 있게 해주는 명령어이다.
mod1.py 파일에 있는 add함수를 사용하기 위해서는 위 예와 같이 mod1.add처럼 모듈 이름 뒤에 "."(도트 연산자)를 붙이고 함수 이름을 쓰면 된다.

(import는 현재 디렉터리에 있는 파일이나 파이썬 라이브러리가 저장된 디렉터리에 있는 모듈만 불러올 수 있다. 파이썬 라이브러리는 파이썬을 설치할 때 자동으로 설치되는 파이썬 모듈을 말한다.)

import의 사용 방법은 다음과 같다.

import 모듈이름

여기에서 모듈 이름은 mod1.py에서 .py확장자를 제거한 mod1만을 가리킨다.

때로는 mod1.add처럼 쓰지 않고 add,sub처럼 모듈이름 없이 함수 이름만 쓰고 싶은 경우도 있을 것이다.

이럴 때는 'from 모듈이름 import 모듈함수'를 사용하면 된다.

from 모듈이름 import 모듈함수

위 형식을 사용하면 위와 같이 모듈이름을 붙이지 않고 바로 해당 모듈의 함수를 쓸 수 있다.

from mod1 import add
from mod1 import sub

print(add(3,4))
print(sub(4,2))

add와 sub 함수 모두 한 줄에 추가하고 싶다면?

from mod1 import add,sub

또는

from mod1 import *

7장에서 배울 정규표현식에서 문자는 '모든 것'이라는 뜻인데 파이썬에서도 마찬가지 의미로 사용한다. 따라서 `from mod1 import `는 mod1.py 의 모든 함수를 불러서 사용하겠다는 뜻이다.

if name == "main": 의 의미

이번에는 mod1.py 파일을 다음과 같이 변경해보자.

from mod1 import add,sub

print(add(3,4))
print(sub(4,2))

이 mod1.py 파일의 add,sub함수를 사용하기 위해 mod1 모듈을 import할 때는 좀 이상한 문제가 생긴다.

import mod1

print(mod1.add(3,4))
print(mod1.sub(4,2))

5
2
7
2
가 출력되는 것을 볼 수 있다.

이는 import mod1.py를 수행하는 순간 mod1.py가 실행이 되어 결괏값을 출력하는 것이다.

우리는 단지 mod1.py파일의 add,sub함수만 사용하려고 한 것인데 말이다.

이러한 문제를 방지하려면 mod1.py파일을 다음처럼 변경해야 한다.

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

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

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

if __name__ == "__main__" 을 사용하면 직접 파일을 실행했을 때는 __name__ == __main__ 이 참이 되어 if문 다음 문장이 수행된다.
반대로 대화형 인터프리터나 다른 파일에서 이 모듈을 불러서 사용할 때는 __name__ == __main__ 이 거짓이 되어 if문 다음 문장이 수행되지 않는다.

Tip. __name__ 변수란?

파이썬의 __name__ 변수는 파이썬이 내부적으로 사용하는 특별한 변수 이름이다. 직접 소스코드를 실행할 경우에는 mod1.py의 해당 변수에 __main__값이 저장된다.
하지만 파이썬 셸니아 다른 파이썬 모듈에서 mod1을 임포트할 경우에는 mod1.py의 __name__ 변수에는 mod1.py의 모듈 이름 값 mod1이 저장된다.

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

지금까지 살펴본 모듈은 함수만 포함했지만 클래스나 변수 등을 포함할 수도 있다.

PI = 3.141592

class Math: 
    def solv(self, r): 
        return PI * (r ** 2) 

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

다른 파일에서 모듈 불러오기

먼저 sys 모듈을 불러온다.

sys.path는 파이썬 라이브러리가 설치되어 있는 디렉터리를 보여준다.
만약 파이썬 모듈이 위 디렉터리에 들어있다면 모듈이 저장된 디렉터리로 이동할 필요없이 바로 불러서 사용할 수 있다. 그렇다면 sys.path에 C:\doit\mymod 디렉터리를 추가하면 아무 곳에서나 불러 사용할 수 있지 않을까?

(명령 프롬프트 창에서는 /,\든 상관없지만 소스 코드 안에서는 반드시 \ 또는 /를 사용해야 한다)

당연하다. sys.path의 결괏값이 리스트이므로 우리는 다음과 같이 할 수 있다.

sys.path.append("C:/doit/mymod")

이러면

import mod2

print(mod2.add(3,4))

가 가능해진다.

또는 PATHNONPATH 환경 변수를 활용할 수 이싿.

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

set명령어를 사용해 PATHNONPATH 환경 변수에 mod2.py 파일이 있는 디렉터리를 설정한다.

그러면 디렉터리 이동이나 별도의 모듈 추가 작업 없이 mod2 모듈을 불러와서 사용할 수 있다.

0개의 댓글