[파이썬] `sys.meta_path`: 임포터 훅 목록 확인
sys.meta_path
는 파이썬에서 임포터 훅(importer hook) 목록을 확인할 수 있는 어트리뷰트(attribute)입니다. 이 기능은 동적으로 모듈을 로드하고 커스텀 임포트 로직을 적용할 때 유용합니다.
파이썬의 import
문은 다음과 같은 단계를 따릅니다:
- 임포트할 모듈이
sys.modules
캐시에 있는지 확인합니다. 캐시에 있다면 더 이상의 로직은 수행하지 않고 해당 모듈을 가져옵니다. - 캐시에 모듈이 없으면,
sys.meta_path
를 검사하여 임포터 훅 목록을 찾습니다. - 찾은 임포터 훅 목록에서 순차적으로
find_module()
메서드를 호출하여 모듈을 찾습니다. - 모듈이 발견되었다면,
load_module()
메서드를 호출하여 모듈을 로드합니다. - 로드된 모듈을
sys.modules
캐시에 저장합니다.
sys.meta_path
를 통해 사용자 지정 임포터 훅을 등록하면, 모듈을 가져오는 과정에 개입할 수 있습니다. 이렇게 하면 모듈의 동적 로딩 및 다양한 커스텀 로직을 구현할 수 있습니다.
다음은 sys.meta_path
를 사용하여 모듈을 동적으로 로드하는 예제 코드입니다:
import sys
class CustomImporter:
def find_module(self, fullname, path=None):
if fullname == 'custom_module':
return self # 모듈을 로드하기 위해 `load_module()` 메서드를 호출하기 위해 self를 반환합니다.
def load_module(self, fullname):
if fullname not in sys.modules:
# 모듈을 동적으로 로드하는 로직을 구현합니다.
# ...
# 로드된 모듈을 sys.modules 캐시에 저장합니다.
sys.modules[fullname] = my_loaded_module
# 로드된 모듈을 반환합니다.
return sys.modules[fullname]
# 커스텀 임포터를 `sys.meta_path`에 등록합니다.
sys.meta_path.append(CustomImporter())
# 커스텀 모듈을 가져옵니다.
import custom_module
위의 코드에서 CustomImporter
클래스는 임포터 훅으로 사용되며, 모듈 이름이 'custom_module'
인 경우에만 관여합니다. find_module()
메서드에서 모듈을 찾고, load_module()
메서드에서 모듈을 실제로 로드합니다. 마지막으로, 로드된 모듈을 sys.modules
캐시에 저장하여 재사용할 수 있습니다.
sys.meta_path
를 사용하면 파이썬의 임포트 메커니즘을 적극적으로 활용하여 동적인 모듈 로딩과 사용자 정의 임포트 로직을 쉽게 구현할 수 있습니다.