modulefinder — 스크립트에서 사용되는 모듈 찾기

소스 코드: Lib/modulefinder.py


이 모듈은 스크립트가 임포트 한 모듈 집합을 판단하는 데 사용할 수 있는 ModuleFinder 클래스를 제공합니다. modulefinder.py는 스크립트로 실행될 수도 있습니다, 인자로 파이썬 스크립트의 파일 이름을 지정하면, 임포트 된 모듈의 보고서가 인쇄됩니다.

modulefinder.AddPackagePath(pkg_name, path)

지정된 path에서 pkg_name 패키지를 찾을 수 있음을 기록합니다.

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의 사용 예를 참조하십시오.

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:
_types:
copyreg:  _inverted_registry,_slotnames,__all__
re._compiler:  isstring,_sre,_optimize_unicode
_sre:
re._constants:  REPEAT_ONE,makedict,AT_END_LINE
sys:
re:  __module__,finditer,_expand
itertools:
__main__:  re,itertools,baconhameggs
re._parser:  _PATTERNENDERS,SRE_FLAG_UNICODE
array:
types:  __module__,IntType,TypeType
---------------------------------------------------
Modules not imported:
guido.python.ham
baconhameggs