分析并输出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实现的udp协议Server和Client代码实例
Jun 04 Python
python实现汉诺塔方法汇总
Jul 25 Python
详解python里使用正则表达式的全匹配功能
Oct 19 Python
python保存数据到本地文件的方法
Jun 23 Python
Python list列表中删除多个重复元素操作示例
Feb 27 Python
Python爬虫——爬取豆瓣电影Top250代码实例
Apr 17 Python
python 实现将多条曲线画在一幅图上的方法
Jul 07 Python
利用python实现汉字转拼音的2种方法
Aug 12 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
pytorch查看模型weight与grad方式
Jun 24 Python
Python Opencv实现单目标检测的示例代码
Sep 08 Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 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
QueryPath PHP 中的jQuery
2010/04/11 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
php动态变量定义及使用
2015/06/10 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
iOS+PHP注册登录系统 PHP部分(上)
2016/12/26 PHP
PHP时间处理类操作示例
2018/09/05 PHP
jquery获取input的value问题说明
2010/08/19 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
浅谈vue-cli 3.0.x 初体验
2018/04/11 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
学习 Vue.js 遇到的那些坑
2021/02/02 Vue.js
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
python如何重载模块实例解析
2018/01/25 Python
Python实现二维数组输出为图片
2018/04/03 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
Python for循环中的陷阱详解
2018/07/13 Python
为什么Python中没有"a++"这种写法
2018/11/27 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
jQuery treeview树形结构应用
2021/03/24 jQuery
便利店投资的创业计划书
2014/01/12 职场文书
大学四年的个人自我评价
2014/01/14 职场文书
入党自我鉴定
2014/03/25 职场文书
优质服务口号
2014/06/11 职场文书
庆六一宣传标语
2014/10/08 职场文书
免职证明样本
2014/10/23 职场文书
学生党支部工作总结2015
2015/05/26 职场文书