分析并输出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利用beautifulSoup实现爬虫
Sep 29 Python
python比较2个xml内容的方法
May 11 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
python subprocess 杀掉全部派生的子进程方法
Jan 16 Python
python使用matplotlib绘制折线图教程
Feb 08 Python
python抖音表白程序源代码
Apr 07 Python
Python SQLAlchemy入门教程(基本用法)
Nov 11 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
python实现简单的tcp 文件下载
Sep 16 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 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五种设计模式小结
2011/03/23 PHP
PHP基础之运算符的使用方法
2013/04/28 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
Javascript学习笔记2 函数
2010/01/11 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
用JQuery实现全选与取消的两种简单方法
2014/02/22 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
js中开关变量使用实例
2017/02/24 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
Java分治归并排序算法实例详解
2017/12/12 Python
python实现画圆功能
2018/01/25 Python
django 实现电子支付功能的示例代码
2018/07/25 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
Django中的用户身份验证示例详解
2019/08/07 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
春季防火方案
2014/05/10 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python