modulefinder — 스크립트가 사용하는 모듈 찾기

modulefinder — 스크립트가 사용하는 모듈 찾기

modulefinder 모듈은 특정 스크립트가 가져오는(import) 모듈의 집합을 알아내는 ModuleFinder 클래스를 제공해요. 이 모듈을 스크립트처럼 실행하면 인자로 받은 파이썬 스크립트의 파일 이름에 대해 가져온 모듈 목록 보고서를 출력해 줘요.

출처: Python documentation

본문

ModuleFinder 클래스는 스크립트가 실행하는 데 필요한 모듈들을 분석하는 데 유용해요. 패키지 경로 추가, 모듈 이름 변경, 특정 모듈 제외 같은 기능도 지원해요.

  • modulefinder.AddPackagePath(pkg_name, path) — 이름이 pkg_name 인 패키지를 지정한 path 에서 찾을 수 있음을 기록해요.
  • modulefinder.ReplacePackage(oldname, newname)oldname 이름의 모듈이 실제로는 newname 이름의 패키지임을 지정할 수 있어요.
  • *class modulefinder.ModuleFinder(path=None, debug=0, excludes=[], replace_paths=[]) — 스크립트가 가져온 모듈 집합을 알아내는 run_script()report() 메서드를 제공해요. path 는 모듈을 찾을 디렉터리 목록이며, 지정하지 않으면 sys.path 를 사용해요. debug 는 디버깅 수준을 설정하며 값이 높을수록 동작 과정의 디버깅 메시지를 많이 출력해요. excludes 는 분석에서 제외할 모듈 이름 목록이고, replace_paths 는 모듈 경로에서 치환할 (oldpath, newpath) 튜플 목록이에요.
    • report() — 스크립트가 가져온 모듈과 그 경로, 누락되거나 누락된 것으로 보이는 모듈을 나열한 보고서를 표준 출력으로 출력해요.
    • run_script(pathname) — 파이썬 코드를 담은 pathname 파일의 내용을 분석해요.
    • modules — 모듈 이름을 모듈에 매핑하는 딕셔너리예요.

ModuleFinder 사용 예제

먼저 분석 대상이 되는 스크립트(bacon.py)를 준비해요.

import re, itertools

try:
    import baconhameggs
except ImportError:
    pass

try:
    import guido.python.ham
except ImportError:
    pass

이제 bacon.py 의 보고서를 출력하는 스크립트를 작성해요.

from modulefinder import ModuleFinder

finder = ModuleFinder()
finder.run_script('bacon.py')

print('Loaded modules:')
for name, mod in finder.modules.items():
    print('%s: ' % name, end='')
    print(','.join(list(mod.globalnames.keys())[:3]))

print('-'*50)
print('Modules not imported:')
print('\n'.join(finder.badmodules.keys()))

예제 출력(아키텍처에 따라 달라질 수 있음)은 Loaded modules: 아래에 실제로 가져온 모듈들이, Modules not imported: 아래에 guido.python.ham, baconhameggs 같이 가져오지 못한 모듈들이 나와요.

더 알아보기 (Learn more)