分析并输出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列出目录下指定文件与子目录的方法
Jul 03 Python
基于Python Shell获取hostname和fqdn释疑
Jan 25 Python
Python中多线程的创建及基本调用方法
Jul 08 Python
Python迭代和迭代器详解
Nov 10 Python
python在非root权限下的安装方法
Jan 23 Python
python实现守护进程、守护线程、守护非守护并行
May 05 Python
Centos 升级到python3后pip 无法使用的解决方法
Jun 12 Python
对python添加模块路径的三种方法总结
Oct 16 Python
python检测IP地址变化并触发事件
Dec 26 Python
Python hashlib常见摘要算法详解
Jan 13 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 Python
Python函数中apply、map、applymap的区别
Nov 27 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写出自己的BLOG系统 2
2010/04/12 PHP
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
解析PHP 使用curl提交json格式数据
2013/06/29 PHP
php基础教程
2015/08/26 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
2018/07/08 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
Python编程实现的简单Web服务器示例
2017/06/22 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
大学毕业生个人自荐信范文
2014/01/08 职场文书
保护环境倡议书100字
2014/05/19 职场文书
工作会议通知
2015/04/15 职场文书
科技馆观后感
2015/06/08 职场文书
服装店员工管理制度
2015/08/07 职场文书
《去年的树》教学反思
2016/02/18 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
利用Python脚本写端口扫描器socket,python-nmap
2022/07/23 Python