您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

5b51 2022/1/14 8:20:22 python 字数 2066 阅读 456 来源 www.jb51.cc/python

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

概述

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

总结

以上是编程之家为你收集整理的分析并输出Python代码依赖的库的实现代码全部内容,希望文章能够帮你解决分析并输出Python代码依赖的库的实现代码所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶