请求:寻找递归识别Jupyter/Python文件导入路径的工具或方案
现成解决方案
- pydeps:专门用来递归解析Python项目的内部依赖,还能生成可视化依赖图。先把Jupyter Notebook转成py文件:
jupyter nbconvert --to script your_notebook.ipynb,再跑pydeps --internal your_script.py,就能得到仅包含内部模块的依赖关系,支持输出树形文本或HTML可视化图。 - AST模块+importlib:别用正则瞎凑,Python的AST(抽象语法树)能精准识别所有导入语法——不管是别名、子模块还是相对导入。写个递归函数就行:用
ast.parse解析文件,遍历Import和ImportFrom节点提取模块名,然后递归找这些模块的文件再解析。 - nbQA + pydeps:不用转py文件,直接对Notebook做静态分析,跑
nbqa pydeps your_notebook.ipynb --internal就能解析里面的内部依赖。
开发自定义脚本的价值
如果现有工具满足不了你的特殊需求——比如要适配项目奇怪的文件夹结构、输出特定格式的依赖清单,那自己写脚本并分享到GitHub绝对有价值。很多维护遗留无文档项目的开发者都有同款痛点,轻量化的专用工具会很受欢迎。
开发思路参考:
- 死磕AST别用正则:AST能准确处理所有合法导入语法,包括
import module as m、from .sub import func甚至from mod import *(通配符导入可以直接过滤,或者提示手动处理)。 - 递归解析要防重复:维护一个已解析的模块集合,避免反复处理同一个文件;对每个导入的本地模块,根据项目根目录和sys.path找到对应的.py文件,再递归解析它的内部导入。
- 处理Notebook:要么读取.ipynb的cell代码块合并成文本,要么用nbconvert转成py再处理,后者更省心。
- 输出灵活:可以生成树形文本、JSON清单,甚至简单的依赖图。
实操小技巧
- 先把项目根目录加入
sys.path,不然解析时容易找不到本地模块。 - 过滤第三方依赖:判断导入的模块文件路径是否在项目目录下,只保留内部的。
- 相对导入转绝对:用
importlib.util.resolve_name把相对导入转成绝对模块名,方便找对应的文件。
内容的提问来源于stack exchange,提问作者LozyLoze
相关产品推荐
相关产品推荐

