pydeps Python 导入耦合图
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/map-python-import-graphs-to-explain-coupling-before-refactors-or-package-splits-with-pydeps。
技能介绍
要解决的问题
当你准备重构一个 Python 项目,或者要把一个体量过大的包拆成几个独立模块时,最先遇到的往往不是「该怎么改」,而是「根本说不清谁依赖谁」。import 语句散落在几十个文件里,靠人工 grep 或者翻目录结构去脑补耦合关系,结果通常是漏掉间接依赖、高估某些模块的独立性,甚至拆完之后才发现运行时还有隐式的导入链。
这类判断一旦出错,代价会直接体现在拆包后的循环导入、启动顺序问题,以及 CI 里莫名其妙的失败上。
技能如何工作
这个技能围绕 pydeps 展开,核心思路是把静态扫描得到的 import 关系直接渲染成一张可视化的模块依赖图,而不是给你一堆文本清单。
- 以真实导入表为起点:它扫描本地 Python 代码库,把所有模块之间的导入关系收集起来,形成一张完整的 import map。重构方案可以拿这张图当依据,而不是凭直觉拍脑袋。
- 图形化的耦合视图:依赖关系以图的形式呈现,你能直观地看到哪些模块处在热点位置,哪条边是拆包时最容易扯断的关键连接。
- 标准库过滤粒度可控:通过
--pylib可以把 Python 标准库模块纳入图里,用来确认某处依赖是否只是标准库而不必过度紧张;需要更完整的视图时,--pylib-all会把全部标准库模块(包括 C 模块)一并纳入。
适用边界与注意点
- 分析对象是本地代码库,需要目标项目已经在机器上,且能被正常扫描。
- 绘图依赖
dot命令,环境里需要装好 Graphviz 并确保dot在PATH中,否则图生成不出来。 - 依赖图反映的是静态导入关系,动态导入(运行期拼接模块名之类的写法)未必能被完整捕获,读图时要结合代码本身一起判断。
- 图上的模块边界不一定等于你打算拆分的边界,它只提供事实,不替你做架构决策。
使用场景
- 准备重构单体 Python 应用前,需要把各模块的 import 关系画成图,确认哪些模块耦合过重,再制定拆分顺序。
- 拆分大型 Python 包时,想先查看包与包之间的真实导入链,判断哪些模块可以独立成新包而不破坏调用关系。
- 项目里存在循环导入或隐藏耦合,想在改动前用一张依赖图定位涉及的模块边界,避免改完才发现间接依赖。
- 接手陌生 Python 代码库时,需要快速生成模块依赖图,理解现有结构后再决定重构范围。
适合人员
- 维护中大型 Python 项目的工程师,需要在重构或拆包前看清模块间真实依赖关系,降低改动风险。
- 负责 Python 代码库拆分与架构调整的技术负责人,希望用依赖图辅助判断模块边界和拆分可行性。
- 需要排查循环导入、定位隐性耦合问题的开发者,希望通过可视化图表快速定位问题模块。
- 刚接手陌生 Python 项目、需要快速建立代码结构认知的开发或审查人员。