modulefinder — 스크립트가 사용하는 모듈 찾기
modulefinder — 스크립트가 사용하는 모듈 찾기
modulefinder 모듈은 특정 스크립트가 가져오는(import) 모듈의 집합을 알아내는 ModuleFinder 클래스를 제공해요. 이 모듈을 스크립트처럼 실행하면 인자로 받은 파이썬 스크립트의 파일 이름에 대해 가져온 모듈 목록 보고서를 출력해 줘요.
본문
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 같이 가져오지 못한 모듈들이 나와요.