본문 바로가기
Programming/python

동적으로 module import 하기

by 유주원 2022. 10. 1.

파이썬에서 정적으로 module을 import를 하려고 하면 아래와 같이 사용하면 된다.

 

import xxxx

 

그렇다면 동적으로 import는 어떻게 해야 할까??

여기서는 손쉽게 import 할 수 있도록 importlib를 이용한 방법을 소개한다.

 

예를 들어 lib폴더에 module.py라는 함수가 있다고 가정하자. 

 

module.py

def print():
    print('module')

 

아래와 같이 사용함으로써 lib의 module.py package를 가져올 수가 있다.

 

import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))
import importlib

pkg = importlib.import_module('lib.module')
pkg.print()
 
sys.path.append의 경우, 해당 모듈 지정(lib.module)을 부모 디렉토리의 상대경로로 인식하게 해 주기 위해 작성했다.

pkg.print()를 호출하면 module이란 string이 출력되는 것을 확인할 수가 있다.

 

이번에는 module.py를 class로 작성해보자.

 

module.py

class Module:
    def __init__(self):
        pass
    def run(self):
        print('run class module')
 
위의 방식대로 module을 가져온 후 run을 실행해보면 에러가 발생하는 것을 확인할 수 있다. 가져오려는 lib가 class인 경우는 getattr 함수를 통해 해당 이름을 가진 속성 값을 가져와야 한다.
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))
import importlib

pkg = importlib.import_module('lib.module')
cls = getattr(pkg, 'Module')

obj = cls()
obj.run()
 
obj.run을 실행해보면 'run class module'이 찍히는 것을 확인해 볼 수가 있다. 해당 코드를 응용함으로써 파이썬에서 동적으로 파이썬 모듈을 호출을 해볼 수가 있다.