分析并输出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根据给定文件返回文件名和扩展名的方法
Mar 27 Python
30分钟搭建Python的Flask框架并在上面编写第一个应用
Mar 30 Python
Python单元测试框架unittest简明使用实例
Apr 13 Python
python结合API实现即时天气信息
Jan 19 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
Jun 05 Python
Python实现单词翻译功能
Jun 06 Python
python使用PyCharm进行远程开发和调试
Nov 02 Python
深入浅析Python中的迭代器
Jun 04 Python
手把手教你进行Python虚拟环境配置教程
Feb 03 Python
在Python中用GDAL实现矢量对栅格的切割实例
Mar 11 Python
Python简单实现词云图代码及步骤解析
Jun 04 Python
Python语言编写智力问答小游戏功能
Oct 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
我的群发邮件程序
2006/10/09 PHP
php输入流php://input使用浅析
2014/09/02 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
js 幻灯片的实现
2011/12/06 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
2018/10/12 Javascript
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
python实现图片上添加图片
2019/11/26 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
python中的列表和元组区别分析
2020/12/30 Python
python wsgiref源码解析
2021/02/06 Python
html+css3实现的登录界面
2020/12/09 HTML / CSS
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
经典优秀个人求职信分享
2013/12/12 职场文书
上班玩游戏检讨书
2014/02/07 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
后勤主管岗位职责
2014/03/01 职场文书
行政管理专业求职信
2014/07/06 职场文书
优秀学生干部事迹材料
2014/12/24 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL