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


Posted in Python onAugust 09, 2015

用法:
分析一个脚本的依赖: 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实现2014火车票查询代码分享
Jan 10 Python
python实现端口转发器的方法
Mar 13 Python
Python实现批量将word转html并将html内容发布至网站的方法
Jul 14 Python
django文档学习之applications使用详解
Jan 29 Python
用十张图详解TensorFlow数据读取机制(附代码)
Feb 06 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
使用python 将图片复制到系统剪贴中
Dec 13 Python
Pytorch 实现focal_loss 多类别和二分类示例
Jan 14 Python
python实现将列表中各个值快速赋值给多个变量
Apr 02 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 Python
Python正则表达式中flags参数的实例详解
Apr 01 Python
python APScheduler执行定时任务介绍
Apr 19 Python
python根据京东商品url获取产品价格
Aug 09 #Python
python制作一个桌面便签软件
Aug 09 #Python
Python 实现简单的电话本功能
Aug 09 #Python
python批量提取word内信息
Aug 09 #Python
python实现下载指定网址所有图片的方法
Aug 08 #Python
Python实现多线程抓取妹子图
Aug 08 #Python
通过Python来使用七牛云存储的方法详解
Aug 07 #Python
You might like
php替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
php实现评论回复删除功能
2017/05/23 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
在IE下获取object(ActiveX)的Param的代码
2009/09/15 Javascript
CCPry JS类库 代码
2009/10/30 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
浅析Python多线程下的变量问题
2015/04/28 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
浅谈python多线程和队列管理shell程序
2015/08/04 Python
深入浅析Python字符编码
2015/11/12 Python
21行Python代码实现拼写检查器
2016/01/25 Python
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
职工运动会邀请函
2014/01/19 职场文书
九年级政治教学反思
2014/02/06 职场文书
药学职务聘任书
2014/03/29 职场文书
保护环境的标语
2014/06/09 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书