分析并输出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中的装饰器用法详解
Jan 14 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
Python判断两个对象相等的原理
Dec 12 Python
基于并发服务器几种实现方法(总结)
Dec 29 Python
Python实现基于POS算法的区块链
Aug 07 Python
Django 响应数据response的返回源码详解
Aug 06 Python
pytorch索引查找 index_select的例子
Aug 18 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
Pycharm如何导入python文件及解决报错问题
May 10 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
Jan 05 Python
Python 调用C++封装的进一步探索交流
Mar 04 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
async和DOM Script文件加载比较
2014/07/20 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
jQuery中closest()函数用法实例
2015/01/07 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
python实现的文件夹清理程序分享
2014/11/22 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
eclipse创建python项目步骤详解
2019/05/10 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
优秀员工自荐书范文
2013/12/08 职场文书
施工安全协议书
2013/12/11 职场文书
安全资料员岗位职责
2013/12/14 职场文书
人力资源部培训专员岗位职责
2014/01/02 职场文书
《掌声》教学反思
2014/02/23 职场文书
课堂教学改革实施方案
2014/03/17 职场文书
和谐社区口号
2014/06/19 职场文书
道路施工安全责任书
2014/07/24 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL