【发布时间】:2012-02-17 21:50:32
【问题描述】:
有人知道可以扫描源目录并检测循环导入的库/脚本吗?
【问题讨论】:
-
Python 解释器似乎很容易找到我的所有内容,但我猜你正在寻找某种静态分析工具.....
-
是的,我知道有些只能在运行时检测到,但我认为我们的大多数都可以静态检测到。
标签: python python-2.5
有人知道可以扫描源目录并检测循环导入的库/脚本吗?
【问题讨论】:
标签: python python-2.5
我不完全了解任何工具,但我现在可以想到几种方法可以为您获取这些数据。
对于您拥有的每个模块,创建一个导入它的存根模块,然后使用
运行该模块$ python -v stub_module.py
这仅在您不依赖 sys.path 黑客并且您的模块在导入时没有危险的副作用时才有效(这两个功能都非常可疑 FWIW)。您将获得传递导入闭包,但使用它检测循环导入应该很简单。
使用logilab.astng,可以轻松提取模块的所有直接导入(查找logilab.astng.nodes.From 和logilab.astng.nodes.Import 类型的节点)。获得所有模块的直接导入列表后,创建导入图并查找循环。
同样,这仅在您不使用 sys.path hacks 时才有效。
【讨论】: