2012-02-17 100 views
4

任何人都知道可以扫描源目录并检测循环导入的库/脚本吗?Python:检测循环导入的脚本

+0

Python解释器似乎很容易找到我的所有,但我猜你正在寻找某种静态分析工具..... – boatcoder 2012-02-17 21:59:51

+0

是啊,我知道有些只能在运​​行时检测到,但我认为我们的大部分可以静态检测。 – Nix 2012-02-17 22:02:39

+1

[检测循环导入]的可能重复(http://stackoverflow.com/questions/2406007/detecting-circular-imports) – 2015-10-27 14:42:02

回答

2

我完全不知道任何工具,但我现在可以想到的几种方法可以让您获得这些数据。

替您

的解释工作,你有充分的模块,创建导入它桩模块,然后用

$ python -v stub_module.py 

运行此模块这仅适用于如果你不靠sys.path hackery和你的模块导入时没有危险的副作用(两个非常可疑的功能FWIW)。您将获得传递性的导入关闭,但使用它检测循环导入应该很简单。

使用logilab.astng

随着logilab.astng,很容易提取您模块的所有直接进口(寻找logilab.astng.nodes.From类型和logilab.astng.nodes.Import的节点)。获得所有模块的直接导入列表后,创建导入图并查找周期。

同样,这只有在你不使用sys.path hacks时才有效。