加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 21:34:40 所属栏目:Python 来源:网络整理
导读:用法: 分析一个脚本的依赖: 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.pyimport astimp

用法:
分析一个脚本的依赖: 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读