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

yipeiwu_com6年前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.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编写一个闹钟功能

音频文件放入和.py文件同级的目录下 import winsound # 导入此模块实现声音播放功能 import time # 导入此模块,获取当前时间 # 提示用户设置时间和分钟...

Python 实现数组相减示例

问题描述: 有2个数组如下 a = [3,3,3,4,4,4,5,6,7] b = [3,3,4,4] 第1题:从数组a中删除所有在数组b中出现过的元素。对于上例来说,a删除结束...

Python实现读写INI配置文件的方法示例

本文实例讲述了Python实现读写INI配置文件的方法。分享给大家供大家参考,具体如下: # -*- coding: utf-8 -*- import ConfigParser im...

django认证系统实现自定义权限管理的方法

本文记录使用django自带的认证系统实现自定义的权限管理系统,包含组权限、用户权限等实现。 0x01. django认证系统 django自带的认证系统能够很好的实现如登录、登出、创建...

mvc框架打造笔记之wsgi协议的优缺点以及接口实现

mvc框架打造笔记之wsgi协议的优缺点以及接口实现

前言: 又是WSGI ,这是我曾经比较熟悉的协议,以前针对实现了wsgi server的unicorn和uwsgi都写过源码解析的文章。  其实他们的实现也很简单,就是给fla...