分析并输出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验证码识别的方法
Jul 10 Python
八大排序算法的Python实现
Jan 28 Python
Python全局变量用法实例分析
Jul 19 Python
python实现最长公共子序列
May 22 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 Python
了解不常见但是实用的Python技巧
May 23 Python
python实现自动化上线脚本的示例
Jul 01 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
Dec 20 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
python 绘制国旗的示例
Sep 27 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
Jul 23 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实现格式化多行文本为Js可用格式
2015/04/15 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
javascript中的缓动效果实现程序
2012/12/29 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
javascript的push使用指南
2014/12/05 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
JQuery PHP图片在线裁剪实例
2020/07/27 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python PyTorch参数初始化和Finetune
2018/02/11 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
python实现转圈打印矩阵
2019/03/02 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
python requests指定出口ip的例子
2019/07/25 Python
利用Python实现kNN算法的代码
2019/08/16 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
django序列化serializers过程解析
2019/12/14 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
2015年人事专员工作总结
2015/04/29 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
旗帜观后感
2015/06/08 职场文书
培训后的感想
2015/08/07 职场文书