modulefinder

modulefinder - 查找脚本使用的模块

2.3版本的新功能。

源代码: Lib / modulefinder.py

该模块提供了一个ModuleFinder可用于确定由脚本导入的模块集的类。modulefinder.py也可以作为脚本运行,以Python脚本的文件名作为参数,之后将打印导入模块的报告。

modulefinder.AddPackagePath(pkg_name, path)

记录名称为pkg_name的包可以在指定的路径中找到。

modulefinder.ReplacePackage(oldname, newname)

允许指定名为oldname的模块实际上是名为newname的软件包。最常见的用法是处理_xmlplus软件包如何替换xml软件包。

class modulefinder.ModuleFinder([path=None, debug=0, excludes=[], replace_paths=[]])

该类提供run_script()report()方法,以确定该组由脚本导入模块。路径可以是搜索模块的目录列表; 如果未指定,sys.path则使用。调试设置调试级别; 更高的值使得该类打印关于它在做什么的调试消息。不包括是要从分析中排除的模块名称的列表。replace_paths(oldpath, newpath)将在模块路径中替换的元组列表。

report()

打印报告到标准输出,列出由脚本及其路径导入的模块,以及缺少或似乎缺失的模块。

run_script(pathname)

分析必须包含Python代码的路径名文件的内容。

modules

字典映射模块名称到模块。请参阅ModuleFinder的示例用法。

1. 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.iteritems(): print '%s: ' % name, print ','.join(mod.globalnames.keys()[:3]) print '-'*50 print 'Modules not imported:' print '\n'.join(finder.badmodules.iterkeys())

示例输出(可能因架构而异):

Loaded modules: _types: copy_reg: _inverted_registry,_slotnames,__all__ sre_compile: isstring,_sre,_optimize_unicode _sre: sre_constants: REPEAT_ONE,makedict,AT_END_LINE sys: re: __module__,finditer,_expand itertools: __main__: re,itertools,baconhameggs sre_parse: __getslice__,_PATTERNENDERS,SRE_FLAG_UNICODE array: types: __module__,IntType,TypeType --------------------------------------------------- Modules not imported: guido.python.ham baconhameggs