分析并输出Python代码依赖的库的实现代码

300次阅读  |  发布于6年以前

用法:
分析一个脚本的依赖: analysis_dependency.py script1.py
递归分析依赖: analysis_dependency.py script1.py -r


    #!/usr/bin/env python
    # encoding: utf-8
    # source: https://github.com/MrLYC/ycyc/blob/dev/tools/analysis_dependency.py

    import ast
    import importlib
    import inspect


    class Analysis(ast.NodeTransformer):
     def __init__(self, paths, recursion):
     self.modules = list()
     self.paths = list(paths)
     self.recursion = recursion

     def add_module(self, module):
     if module and module not in self.modules:
    self.modules.append(module)
     if self.recursion:
    try:
     path = inspect.getsourcefile(importlib.import_module(module))
     if path:
    self.paths.append(path)
    except:
    pass

     def visit_Import(self, node):
     for i in node.names:
    self.add_module(i.name)

     def visit_ImportFrom(self, node):
    self.add_module(node.module)

     def analysis(self):
     for p in self.paths:
    try:
     with open(p,"rt") as fp:
     self.visit(ast.parse(fp.read(), p))
    except:
    pass
     return tuple(self.modules)

    if __name__ =="__main__":
     import argparse

     parser = argparse.ArgumentParser()
     parser.add_argument("paths", nargs="+")
     parser.add_argument("-r","--recursion", action="store_true", default=False)
     args = parser.parse_args()

     analysisor = Analysis(args.paths, args.recursion)
     for m in analysisor.analysis():
     print m

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8