分析并输出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+matplotlib演示电偶极子实例代码
Jan 12 Python
django中模板的html自动转意方法
May 27 Python
使用Scrapy爬取动态数据
Oct 21 Python
Python中的集合介绍
Jan 28 Python
对Django url的几种使用方式详解
Aug 06 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
Oct 11 Python
python数字类型math库原理解析
Mar 02 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
python3 正则表达式基础廖雪峰
Mar 25 Python
keras topN显示,自编写代码案例
Jul 03 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 Python
Pytorch实验常用代码段汇总
Nov 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
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
2017/06/28 PHP
JS 控制非法字符的输入代码
2009/12/04 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
Python实现优先级队列结构的方法详解
2016/06/02 Python
Python编写一个优美的下载器
2018/04/15 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
python selenium xpath定位操作
2020/09/01 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
快速创建python 虚拟环境
2020/11/28 Python
如何利用python 读取配置文件
2021/01/06 Python
python实现发送邮件
2021/03/02 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
俄罗斯优惠券网站:BIGLION
2017/05/21 全球购物
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
教师自我鉴定范文
2013/11/10 职场文书
学术会议欢迎词
2014/01/09 职场文书
广告词串烧
2014/03/19 职场文书
诚信考试承诺书
2014/03/27 职场文书
学习张林森心得体会
2014/09/10 职场文书
授权收款委托书范本
2014/10/10 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang
如何解决.cuda()加载用时很长的问题
2021/05/24 Python