파이썬의 modulefinder 모듈에 포함된 ModuleFinder 클래스는 특정 스크립트가 임포트하는 모듈 목록을 분석해 주는 도구입니다. 이 모듈은 명령줄 인터페이스(CLI)와 프로그래밍 방식의 인터페이스 두 가지 방법을 모두 제공하므로, 간단한 확인부터 자동화된 의존성 분석까지 다양하게 활용할 수 있습니다.
예제용 테스트 스크립트
기능을 확인하기 위해 아래와 같은 테스트 스크립트를 준비합니다. 정상적으로 임포트되는 모듈과 존재하지 않는 모듈을 함께 포함시켜 두 동작을 비교해 볼 수 있습니다.
#modfinder.py import hello try: import trianglebrowser import nomodule,mymodule except ImportError: pass
명령줄 인터페이스 사용법
가장 간단한 방법은 -m 옵션으로 modulefinder를 직접 실행하는 것입니다. 아래 명령 하나만으로 해당 스크립트가 참조하는 모듈 중 실제로 발견된 것과 찾지 못한 것을 한눈에 확인할 수 있습니다.
E:\python37>python -m modulefinder modfinder.py
실행 결과
Name File ---- ---- m __main__ modfinder.py m hello hello.py m math m trianglebrowser trianglebrowser.py Missing modules: ? mymodule imported from __main__ ? nomodule imported from __main__
출력 결과를 보면 hello, math, trianglebrowser는 정상적으로 로드된 반면, 존재하지 않는 mymodule과 nomodule은 'Missing modules' 항목으로 표시됩니다.
프로그래밍 방식 인터페이스
코드 내에서 직접 분석 결과를 활용하고 싶다면 ModuleFinder 클래스의 메서드와 속성을 사용하면 됩니다.
주요 메서드와 속성
- run_script(): 지정한 파일(파이썬 코드)의 내용을 분석하여 임포트되는 모듈을 조사합니다.
- report(): 분석 결과를 표준 출력으로 출력합니다. 스크립트가 임포트한 모듈과 그 경로, 그리고 누락되었거나 누락으로 추정되는 모듈까지 함께 보여줍니다.
- modules: 모듈 이름을 모듈 객체에 매핑하는 딕셔너리입니다.
- badmodules: 로드하지 못한 모듈 정보를 담고 있는 딕셔너리입니다.
프로그래밍 방식 예제
아래 예제에서는 ModuleFinder 객체를 생성한 뒤 run_script()로 스크립트를 분석하고, modules와 badmodules 속성을 순회하며 결과를 출력합니다.
import modulefinder
modfind=modulefinder.ModuleFinder()
modfind.run_script('modfinder.py')
print ('Modules loaded:')
for k,v in modfind.modules.items():
print (k,v)
print ('not found:')
for i in modfind.badmodules.keys():
print (i)실행 결과
Modules loaded:
__main__ Module('__main__', 'modfinder.py')
hello Module('hello', 'E:/python37\\hello.py')
trianglebrowser Module('trianglebrowser', 'E:/python37\\trianglebrowser.py')
math Module('math')
not found:
nomodule
mymodule이처럼 modulefinder 모듈을 활용하면 배포 전에 스크립트의 의존성을 점검하거나, 누락된 모듈로 인한 실행 오류를 사전에 방지할 수 있습니다.