pydeps-生成依赖图¶
备注
这个工具好用
安装 pydeps:
pip install pydeps
注:
需求先安装 graphviz 保证 dot 命令可用
生成依赖图:
pydeps /path/to/your/project
选项¶
–max-bacon¶
# --max-bacon: 指定培根数(默认2)
# --max-bacon=0 (infinite)
shell> pydeps pydeps --show --max-bacon 2 --pylib -x os re types _\* enum
![https://img.zhaoweiguo.com/uPic/2024/06/Edq1oC.png](https://img.zhaoweiguo.com/uPic/2024/06/Edq1oC.png)
–cluster¶
# --cluster: collapse external modules into folder-shaped objects
# 如果你对外部模块的内部结构不感兴趣,你可以添加 --cluster 标志,它将外部模块折叠成文件夹形状的对象
shell> pydeps pydeps --max-bacon=4 --cluster
![https://img.zhaoweiguo.com/uPic/2024/06/aNPp7M.png](https://img.zhaoweiguo.com/uPic/2024/06/aNPp7M.png)
–max-cluster-size=N¶
# --max-cluster-size: controls how many nodes can be in a cluster before it is collapsed to a folder icon
# 要查看内部结构并描绘外部模块,请使用 --max-cluster-size 标志,该标志控制在折叠为文件夹图标之前集群中可以有多少个节点
指定较大的 --max-cluster-size
就会把 yaml
内部结构展示出来:
shell> pydeps pydeps --max-bacon=4 --cluster --max-cluster-size=1000
![https://img.zhaoweiguo.com/uPic/2024/06/u8gQNB.png](https://img.zhaoweiguo.com/uPic/2024/06/u8gQNB.png)
指定较小的 --max-cluster-size
就会把大于3的 yaml
缩成一个文件夹:
shell> pydeps pydeps --max-bacon=4 --cluster --max-cluster-size=3
![https://img.zhaoweiguo.com/uPic/2024/06/GuW2hC.png](https://img.zhaoweiguo.com/uPic/2024/06/GuW2hC.png)
–min-cluster-size=N¶
# --min-cluster-size: remove clusters with too few nodes
–rmprefix xxxx¶
# --rmprefix pydeps.: 在显示的图表里面不显示 `pydeps.`
–max-module-depth=N¶
# --max-module-depth:
# 标志检查包的内部依赖关系,同时限制模块深度
shell> pydeps pandas --only pandas --max-module-depth=2 -x pandas._\* pandas.test\* pandas.conftest
–rankdir¶
# Graph direction
# 指定显示方向
Top to bottom (default):
shell> pydeps pydeps --rankdir TB
Bottom to top:
shell> pydeps pydeps --rankdir BT
Left to right:
shell> pydeps pydeps --rankdir LR
Right to left:
shell> pydeps pydeps --rankdir RL
![https://img.zhaoweiguo.com/uPic/2024/06/MmBMFP.png](https://img.zhaoweiguo.com/uPic/2024/06/MmBMFP.png)
本图也可与下面选项 --collapse-target-cluster
对比,理解 --collapse-target-cluster
选项的作用¶
–collapse-target-cluster¶
当内部目标包依赖项不重要时,可以使用 –collapse-target-cluster 标志折叠它们
把内部依赖包看成一个整体
This option also implies
--cluster
shell> pydeps pydeps --collapse-target-cluster
![https://img.zhaoweiguo.com/uPic/2024/06/ODCXaE.png](https://img.zhaoweiguo.com/uPic/2024/06/ODCXaE.png)
其他¶
常用选项:
-x/--exclude-exact: 排除module列表
-x PATTERN [PATTERN ...]
or
--exclude PATTERN [PATTERN ...]
示例:
shell> pydeps pandas --max-module-depth=2 -x pandas._\* pandas.test\* pandas.conftest
-xx/--exclude-exact:
示例:
-xx foo.bar will exclude foo.bar, but not foo.bar.blob
--only MODULE_PATH [MODULE_PATH ...]
only include modules that start with MODULE_PATH
--pylib include python std lib modules
--pylib-all include python all std lib modules (incl. C modules)
使用技巧:
指定主要模块/包
pydeps /path/to/your/project/main_module.py
排除不必要的依赖: 限制生成的依赖层数,只显示最多n层的依赖
pydeps --max-bacon=2 /path/to/your/project
实战¶
metaGPT:
pydeps --max-bacon=2 ./metagpt/roles/product_manager.py
pydeps --max-bacon=2 ./metagpt/actions/action.py
...
llama_agent:
# 生成依赖图
pydeps --max-bacon=5 --collapse-target-cluster ./llama_agents
# 生成内部详细、外部cluster图
➜ pydeps --max-bacon=2 --cluster ./llama_agents
llama_index:
pydeps --max-bacon=2 --collapse-target-cluster ./llama-index-core/llama_index/core/
pydeps --max-bacon=2 --cluster ./llama-index-core/llama_index/core/