分析并输出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脚本抓取网络小说来制作自己的阅读器
Aug 20 Python
深入解读Python解析XML的几种方式
Feb 16 Python
Python如何获取系统iops示例代码
Sep 06 Python
Python原始字符串与Unicode字符串操作符用法实例分析
Jul 22 Python
详解python实现线程安全的单例模式
Mar 05 Python
Python操作json的方法实例分析
Dec 06 Python
python 执行文件时额外参数获取的实例
Dec 18 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
Aug 13 Python
python区分不同数据类型的方法
Oct 14 Python
python中count函数简单用法
Jan 05 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
python查询MySQL将数据写入Excel
Oct 29 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
安健A254立体声随身听的分析与打磨
2021/03/02 无线电
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
php制作文本式留言板
2015/03/18 PHP
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
js跳转页面方法总结
2014/01/29 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
Angular ng-repeat 对象和数组遍历实例
2016/09/14 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
js实现拖拽功能
2017/03/01 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
python如何查看安装了的模块
2020/06/23 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
美国创意礼品网站:UncommonGoods
2017/02/03 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
2013英文求职信模板范文
2013/11/15 职场文书
大学生秋游活动方案
2014/02/17 职场文书
德育标兵事迹材料
2014/08/24 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python
MySQL日期时间函数知识汇总
2022/03/17 MySQL
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript