본문 바로가기

코딩/파이썬 기초

파이썬 튜토리얼 034. 파이썬 모듈 import

python : module : import, from, as

파이썬 모듈

파이썬에선 파이썬 파일 (보통 파일 확장자가 py인 파일) 하나 하나가 파이썬 모듈이다.

 

하나의 파이썬 파일에서 다른 파이썬 파일, 즉 파이썬 모듈 내에 정의되어 있는 코드(변수나 함수, 클래스 등등)는 키워드 import로 대상 파이썬 모듈을 불러온 후 사용한다.

 

예를 들어 다음과 같이 파이썬 파일 my_module1.py 내에 함수 hello_my_module1이 정의되어 있다면,

 

print(__name__)

def hello_my_module1():
    print('Hello My Module 1')

 

아래와 같이 파이썬 모듈 my_module1은 키워드 import로 불러올 수 있다.

키워드 import로 불러온 파이썬 파일 내 코드는 <파이썬 모듈 이름> + <.> 형식으로 접근할 수 있다.

 

즉, 파이썬 모듈 my_module1 내에 정의되어 있는 함수 hello_my_module1은 my_module1.hello_my_module1()으로 호출할 수 있다.

 

 

import my_module1

print(__name__)
my_module1.hello_my_module1()

 

python_main.py 파일의 실행

 

변수 __name__은 파이썬이 기본적으로 제공하는 변수로 변수 __name__엔 모듈의 이름 정보가 문자열 형태로 저장되어 있다.

 

위의 코드를 실행한 결과에서 다음의 두 가지를 알 수 있다.

 

1. 키워드 import로 임의 파이썬 모듈을 불러오면, 해당 시점에 해당 파이썬 모듈이 실행됨을 의미한다.

2. 파이썬 변수 __name__은 파이썬 파일이 실행되는지 아니면 키워드 import에 의해 불려지는지에 따라 그 값이 다른다. 만약 파이썬 파일이 import가 아닌 실행의 대상이면, 변수 __name__의 값은 "__main__"이다.

 

파이선 모듈을 불러올 때 키워드 as로 사용할 파이썬 모듈 이름을 변경할 수 있다.

 

import my_module1 as mm1

mm1.hello_my_module1()

 

파이썬 모듈 my_module1.py 파일이 다음과 같을 때, 키워드 from과 import를 함께 사용하면 파이썬 모듈에서 원하는 코드만 불러와 사용할 수 있다. 이 경우 불러온 파이썬 모듈의 함수 호출 시 모듈 이름은 붙이지 않아도 된다.

 

print(__name__)

def hello_my_module1():
    print('Hello My Module 1')

def hello_world1():
    print('Hello World 1')

def hello_world2():
    print('Hello World 2')

 

from my_module1 import hello_my_module1, hello_world1

hello_my_module1()
hello_world1()

 

만약 파이썬 모듈 내 모든 코드를 사용하고자 한다면, 애스터리크 *를 사용하면 된다.

 

from my_module1 import *

 

불러올 파이썬 모듈이 여러 폴더에 저장되어 있다면, 아래와 같은 방식으로 파이썬 모듈을 불러온다.

 

 

import my_module1
import my_modules.my_module2
import my_modules.generic.my_module3

my_module1.hello_my_module1()
my_modules.my_module2.hello_my_module2()
my_modules.generic.my_module3.hello_my_module3()

 

하나의 파이썬 파일에서 파이썬 모듈을 여러 번 import해도 해당 파이썬 모듈은 한번만 실행이 된다.

 

import my_module1
import my_module1
import my_module1
import my_module1
import my_module1

print(__name__)