分析并输出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中实现贪婪排名算法的教程
Apr 17 Python
Python Paramiko模块的使用实际案例
Feb 01 Python
Python使用 Beanstalkd 做异步任务处理的方法
Apr 24 Python
基于Pandas读取csv文件Error的总结
Jun 15 Python
Python3对称加密算法AES、DES3实例详解
Dec 06 Python
Python删除n行后的其他行方法
Jan 28 Python
使用 Python ssh 远程登陆服务器的最佳方案
Mar 06 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
Apr 25 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
Jun 02 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 Python
matplotlib 范围选区(SpanSelector)的使用
Feb 24 Python
PyTorch中permute的使用方法
Apr 26 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
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
js中将字符串转换成json的三种方式
2011/01/12 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
angular4自定义组件详解
2017/09/28 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
python日志logging模块使用方法分析
2019/05/23 Python
python 搜索大文件的实例代码
2019/07/08 Python
浅析python中while循环和for循环
2019/11/19 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
python实现简单的学生管理系统
2021/02/22 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
美国本地交易和折扣网站:LocalFlavor.com
2017/10/26 全球购物
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
四年级学生评语大全
2014/04/21 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
中学生自我评价范文
2015/03/03 职场文书
正规借条模板
2015/05/26 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
催款函范本大全
2015/06/24 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
Python中的协程(Coroutine)操作模块(greenlet、gevent)
2022/05/30 Python