当前位置: 首页 > news >正文

Python 包结构探测器:一键查看任意包的模块结构

前言

在学习一个新的 Python 包时,我们经常想快速了解它有哪些模块和子包。本文分享一个简单实用的小工具,帮你一键生成包的模块结构树。


完整代码

#!/usr/bin/env python3""" 包结构探测器 - 快速查看任意Python包的模块结构 """importargparseimportimportlibimportpkgutilimportsysdefprobe_package(package_name,max_depth=3):""" 探测包结构并打印模块树 Args: package_name: 包名 max_depth: 最大探测深度 """# 导入包try:root=importlib.import_module(package_name)exceptModuleNotFoundError:print(f"❌ 找不到包:{package_name}")print(f" 请先安装: pip install{package_name}")returnexceptExceptionase:print(f"❌ 导入失败:{e}")return# 收集所有模块modules=[root.__name__]ifhasattr(root,"__path__"):# 是一个包,遍历子模块defwalk(pkg,depth=0):ifdepth>=max_depth:returntry:forfinder,name,ispkginpkgutil.iter_modules(pkg.__path__,pkg.__name__+"."):modules.append(name)ifispkg:try:sub=importlib.import_module(name)walk(sub,depth+1)except:passexcept:passwalk(root)# 打印结果print(f"\n📦{package_name}模块结构")print("="*40)# 构建树形结构root_name=package_nameformod_nameinsorted(modules):# 计算缩进depth=mod_name.count('.')-root_name.count('.')indent=" "*depth# 取最后一段名称short_name=mod_name.split('.')[-1]# 判断是包还是模块try:mod=importlib.import_module(mod_name)is_pkg=hasattr(mod,"__path__")icon="📁"ifis_pkgelse"📄"except:icon="📄"print(f"{indent}{icon}{short_name}")print("="*40)print(f"共{len(modules)}个模块\n")defmain():parser=argparse.ArgumentParser(description="查看Python包的模块结构")parser.add_argument("package",help="包名")parser.add_argument("-d","--depth",type=int,default=3,help="最大深度(默认3)")args=parser.parse_args()probe_package(args.package,args.depth)if__name__=="__main__":main()

使用方法

基础用法

python probe_pkg.py requests

输出:

📦 requests 模块结构 ======================================== 📁 requests 📄 adapters 📄 api 📄 auth 📄 certs 📄 compat 📄 cookies 📄 exceptions 📄 hooks 📄 models 📄 sessions 📄 status_codes 📄 structures 📄 utils ======================================== 共 14 个模块

控制探测深度

python probe_pkg.py urllib3 -d2

更多示例

# 探测 flaskpython probe_pkg.py flask# 探测 numpy(内容较多,限制深度)python probe_pkg.py numpy -d1# 探测本地开发的包python probe_pkg.py myproject

代码解析

核心原理

  1. importlib.import_module()- 动态导入指定的包
  2. pkgutil.iter_modules()- 遍历包内的所有子模块
  3. __path__属性- 判断是包(有__path__)还是普通模块

关键代码片段

# 判断是包还是模块ifhasattr(module,"__path__"):print("这是一个包,可以包含子模块")else:print("这是一个普通模块")# 遍历子模块forfinder,name,ispkginpkgutil.iter_modules(pkg.__path__):print(f"发现:{name}, 是否为包:{ispkg}")

实用技巧

1. 快速了解新包

拿到一个新包,先跑一遍探测器,对整体结构有个概念:

python probe_pkg.py some_new_package

2. 配合 help() 使用

找到感兴趣的模块后,用help()查看详情:

importrequests.adaptershelp(requests.adapters)

3. 项目自检

检查自己项目的模块组织是否合理:

python probe_pkg.py myproject -d5

总结

这个小工具虽然简单,但在日常开发中非常实用:

  • ✅ 快速了解包结构
  • ✅ 学习新库的起点
  • ✅ 检查项目模块组织
  • ✅ 代码量少,易于修改扩展

把它保存为probe_pkg.py,放到常用工具目录,随时调用!


💡扩展思路:可以加入导出 Markdown、显示模块文档、统计代码行数等功能。

http://www.cnnetsun.cn/news/3814.html

相关文章:

  • 云电脑系列14:企业IT运维变简单:云电脑批量装软件、统一管安全、故障快恢复
  • z命令的智能记忆系统:.z文件如何让你的终端导航快如闪电
  • Layer弹层组件完整指南:5分钟快速上手Web弹层开发
  • Wan2.2-T2V-A14B在品牌周年庆视频制作中的高效应用
  • Wan2.2-T2V-A14B支持多终端自适应分辨率输出吗?
  • 程序员学习大模型必看:AI Agent技术演进与未来趋势详解
  • Wan2.2-T2V-A14B在AI主播背景视频生成中的应用前景
  • XPay个人免签收款支付系统终极指南:5分钟快速上手
  • 使用Wan2.2-T2V-A14B生成长视频内容的关键优化策略
  • Wan2.2-T2V-A14B模型安全性评估:是否存在偏见风险
  • 媒体观点 | 风口上的AI玩具,为何被从业者想简单了?
  • 5分钟上手GPT-3 Sandbox:AI应用快速原型开发终极指南
  • 使用Wan2.2-T2V-A14B生成角色动画的技术要点总结
  • Wan2.2-T2V-A14B生成视频的元数据嵌入与追踪机制
  • PyPortfolioOpt投资组合优化:从困惑到精通的完整解决方案
  • 【无标题】
  • Pinyin4NET实战指南:高效实现中文拼音转换的完整方案
  • Maya动画资产USD导出实战:打通三维创作到协作的最后一公里
  • 先知AIGC洞察:家居服内容焦虑正在加速
  • 用Czerny-Turner系统检测钠灯双线
  • JavaQuestPlayer技术架构深度解析:基于libqsp的跨平台QSP游戏引擎
  • 自动寻路完整版本demo(可上传图片版本)
  • 实验小白必看ATTO 488 BCN双环(6.1.0)壬炔解析
  • 大模型强化学习框架安装避坑指南:从环境搭建到实战训练
  • 【FRP】Windows 安装 frpc 客户端
  • DPT设备完全定制手册:解锁索尼电子纸隐藏功能
  • PLabel实战指南:从零搭建智能标注系统的完整攻略
  • AgentBench智能体评测终极指南:快速掌握多环境LLM评估框架使用技巧
  • 如何快速配置城通网盘解析器:完整使用手册
  • FGA终极自动战斗指南:告别繁琐操作,轻松刷本刷素材