Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 가져오기 구현(importlib)

<시간/>

importlib 패키지는 모든 Python 인터프리터에 이식 가능한 Python 소스 코드의 import 문의 구현을 제공합니다. 이것은 또한 Python 이외의 프로그래밍 언어로 구현된 것보다 더 이해하기 쉬운 구현을 제공합니다.

또한 이 패키지는 가져오기를 구현하기 위한 구성 요소를 노출하므로 사용자가 가져오기 프로세스에 참여할 수 있는 사용자 지정 개체(가져오기라고 함)를 더 쉽게 만들 수 있습니다.

importlib 패키지에는 import_module()

이라는 중요한 함수가 있습니다.

가져오기_모듈():

이 함수는 프로그래밍 방식으로 모듈을 가져옵니다. 모듈 이름은 함수의 첫 번째 매개변수입니다. 선택적 두 번째 매개변수는 패키지 이름이 있는 경우 지정합니다.

invalidate_cache():

이 기능은 파인더의 내부 캐시를 무효화합니다. 프로그램이 실행되는 동안 모듈이 생성/설치된 경우 이 함수를 호출하여 모든 파인더가 새 모듈의 존재를 알 수 있도록 해야 합니다.

다시 로드():

이 함수는 이전에 가져온 모듈을 다시 로드합니다. 이것은 외부 편집기를 사용하여 모듈 소스 파일을 편집하고 Python 인터프리터를 종료하지 않고 새 버전을 시도하려는 경우에 유용합니다.

예:

아래와 같은 코드를 가진 module1.py 및 module2.py라는 두 개의 Python 스크립트를 만듭니다.

#module1
def main():
   print ('module imported', __name__)
   return
if __name__=='__main__':
   main()

이제 importlib 패키지를 사용하여 이러한 모듈을 동적으로 가져옵니다.

>>> import importlib
>>> mod=importlib.import_module('module1')
>>> mod.__name__
'module1'
>>> mod=importlib.import_module('module2')
>>> mod.__name__
'module2'
>>> mod.main()
module imported module2
>>>

importlib 패키지에는 다음 하위 모듈이 포함되어 있습니다.

importlib.abc

이 모듈에는 가져오기에 사용되는 모든 핵심 추상 기본 클래스가 포함되어 있습니다. 핵심 추상 기본 클래스의 일부 하위 클래스도 핵심 ABC 구현을 돕기 위해 제공됩니다.

importlib.resources

이 모듈은 Python의 가져오기 시스템을 활용하여 패키지 내의 리소스에 대한 액세스를 제공합니다.

importlib.machinery

이 모듈에는 모듈 찾기 및 로드를 가져오는 데 도움이 되는 다양한 개체가 포함되어 있습니다.

importlib.util

이 모듈에는 수입업자를 위한 유틸리티 코드가 있습니다. 그것은 수입업자의 건설에 도움이되는 다양한 개체를 포함합니다. 다음과 같은 중요한 기능이 정의되어 있습니다.

find_spec():

이 함수는 지정된 패키지 이름을 기준으로 모듈의 사양을 찾습니다. 이름이 하위 모듈(점 포함)인 경우 상위 모듈을 자동으로 가져옵니다. 이름과 패키지는 import_module()과 동일하게 작동합니다.

module_from_spec(사양)

spec 및 spec.loader.create_module을 기반으로 새 모듈을 만듭니다.

예:

import importlib.util
def check_module(mod):
   spec = importlib.util.find_spec(mod)
   if spec is None:
      print('Module: {} not found'.format(mod))
      return None
   else:
      print('Module: {} can be imported!'.format(mod))
      return spec
   def import_module(spec):
      mod = importlib.util.module_from_spec(spec)
      spec.loader.exec_module(mod)
      return mod
if __name__ == '__main__':
   spec = check_module('notamodule')
   spec = check_module('module1')
   if spec:
      mod = import_module(spec)
      mod.main()

출력:

Module: notamodule not found
Module: module1 can be imported!
module imported module1