동적으로 module import 하기
2022. 10. 1. 14:45ㆍProgramming/python
파이썬에서 정적으로 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'이 찍히는 것을 확인해 볼 수가 있다. 해당 코드를 응용함으로써 파이썬에서 동적으로 파이썬 모듈을 호출을 해볼 수가 있다.