Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

프로그램 실행 중 파이썬(Python) 모듈을 동적으로 임포트하는 방법

파이썬에서는 코드가 실행되는 도중에도 importlib 패키지의 import_module() 함수를 사용해 모듈을 동적으로 가져올 수 있습니다. 이 방법은 모듈 이름을 미리 알 수 없거나, 설정 파일·사용자 입력에 따라 필요한 모듈이 달라지는 경우에 특히 유용합니다.

import_module() 함수 기본 사용법

import_module(moduleName)은 모듈 이름을 문자열로 전달받아 해당 모듈 객체를 반환합니다. 반환된 모듈을 globals() 딕셔너리에 할당하면, 일반적인 import 문처럼 모듈을 사용할 수 있습니다.

>>> from importlib import import_module
>>> moduleName = "os"
>>> globals()[moduleName] = import_module(moduleName)

여러 모듈을 한 번에 동적으로 임포트하기

임포트할 모듈 목록이 있다면 for 반복문과 함께 사용하면 됩니다. 아래 예제는 세 개의 표준 라이브러리를 동적으로 불러옵니다.

>>> import importlib
>>> modnames = ["os", "sys", "math"]
>>> for lib in modnames:
...     globals()[lib] = importlib.import_module(lib)

여기서 globals()는 현재 전역 심볼 테이블을 담고 있는 딕셔너리를 반환합니다. 각 라이브러리 이름을 키(key)로 지정하고, 모듈 임포트 결과로 받은 객체를 값(value)으로 저장하는 방식입니다. 이후 코드에서는 os.path, math.sqrt 등 일반적인 방식과 동일하게 해당 모듈을 사용할 수 있습니다.

패키지 내부의 하위 모듈 임포트하기

이미 어떤 패키지를 임포트한 상태라면, 그 안에 포함된 개별 모듈도 같은 함수로 동적으로 가져올 수 있습니다. 이때 주의할 점은 모듈 이름만 전달해서는 안 되며, 패키지 이름을 포함한 전체 경로(전체 이름)를 전달해야 한다는 것입니다.

>>> import importlib
>>> pack = 'datetime'
>>> mod = 'date'
>>> globals()[pack] = importlib.import_module(pack)
>>> globals()[pack + '.' + mod] = importlib.import_module(pack + '.' + mod)

위 예제에서는 datetime 패키지와 그 하위 모듈인 datetime.date를 점(.)으로 연결한 전체 경로를 문자열로 만들어 임포트합니다. 만약 'date'만 전달하면 최상위 모듈로 인식되어 원하는 하위 모듈을 찾지 못하고 ModuleNotFoundError가 발생할 수 있습니다.

정리

  • importlib.import_module("모듈이름")을 사용하면 실행 중에 모듈을 동적으로 임포트할 수 있습니다.
  • globals()[이름] = 모듈객체 형태로 저장하면 일반 import와 같은 방식으로 사용할 수 있습니다.
  • 패키지 내부의 하위 모듈은 반드시 "패키지.모듈" 형태의 전체 경로로 지정해야 합니다.