分析并输出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中编写并发程序
Feb 27 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
对python csv模块配置分隔符和引用符详解
Dec 12 Python
python获取url的返回信息方法
Dec 17 Python
Python实现正则表达式匹配任意的邮箱方法
Dec 20 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
May 31 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
Python3.10的一些新特性原理分析
Sep 15 Python
Python+tkinter实现高清图片保存
Mar 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
黑夜路人出的几道php笔试题
2009/08/04 PHP
php 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
理解php Hash函数,增强密码安全
2011/02/25 PHP
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
Node.js实现简单聊天服务器
2014/06/20 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
nodejs批量下载图片的实现方法
2017/05/19 NodeJs
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
jQuery实现全选按钮
2021/01/01 jQuery
Python使用minidom读写xml的方法
2015/06/03 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
应届生法律求职信
2013/10/22 职场文书
英语道歉信范文
2014/01/09 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
婚宴致辞
2015/07/28 职场文书
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python