分析并输出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 11 Python
Python常用内置模块之xml模块(详解)
May 23 Python
Python 获得13位unix时间戳的方法
Oct 20 Python
python队列queue模块详解
Apr 27 Python
在python中实现将一张图片剪切成四份的方法
Dec 05 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
详解Python3注释知识点
Feb 19 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
Django实现CAS+OAuth2的方法示例
Oct 30 Python
Python3 集合set入门基础
Feb 10 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
Mar 03 Python
Python实现初始化不同的变量类型为空值
Jun 02 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连mysql和oracle数据库性能比较
2006/10/09 PHP
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
php 检查电子邮件函数(自写)
2014/01/16 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
js arguments.callee的应用代码
2009/05/07 Javascript
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
JavaScript接口的实现三种方式(推荐)
2016/06/14 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
详解Python字符串对象的实现
2015/12/24 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
python通过微信发送邮件实现电脑关机
2018/06/20 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
Python3 log10()函数简单用法
2019/02/19 Python
决策树剪枝算法的python实现方法详解
2019/09/18 Python
python设置表格边框的具体方法
2020/07/17 Python
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
投资合作协议书范本
2014/04/17 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
一文读懂navicat for mysql基础知识
2021/05/31 MySQL