分析并输出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使用nntp读取新闻组内容的方法
May 08 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
Mar 02 Python
对python:threading.Thread类的使用方法详解
Jan 31 Python
python里dict变成list实例方法
Jun 26 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
PyCharm MySQL可视化Database配置过程图解
Jun 09 Python
Django静态文件加载失败解决方案
Aug 26 Python
python urllib和urllib3知识点总结
Feb 08 Python
Python+uiautomator2实现自动刷抖音视频功能
Apr 29 Python
Python 中数组和数字相乘时的注意事项说明
May 10 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
Laravel重写用户登录简单示例
2016/10/08 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
妙用Jquery的val()方法
2012/06/27 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
2019/07/19 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
Python中使用ElementTree解析XML示例
2015/06/02 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
Python定义一个Actor任务
2020/07/29 Python
python实现移动木板小游戏
2020/10/09 Python
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
法学专业个人求职信
2013/09/26 职场文书
青春演讲稿范文
2014/05/08 职场文书
企业安全生产标语
2014/06/06 职场文书
安全横幅标语
2014/06/09 职场文书
宣传活动总结范文
2014/07/01 职场文书
市场营销计划书范文
2015/01/16 职场文书
2015年加油站工作总结
2015/05/13 职场文书
公司晚宴祝酒词
2015/08/11 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers