Programming/python

동적으로 module import 하기

유주원 2022. 10. 1. 14:45

파이썬에서 정적으로 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'이 찍히는 것을 확인해 볼 수가 있다. 해당 코드를 응용함으로써 파이썬에서 동적으로 파이썬 모듈을 호출을 해볼 수가 있다.