#!/usr/bin/python import sys def main((_, modname,)): showed = set() for depth, name, filename in mod_tree(__import__(modname)): print ' ' * 4 * depth, name, filename if name not in showed else '' showed.add(name) def mod_tree(mod, seen=set()): yield 0, mod.__name__, getattr(mod, '__file__', None) if mod not in seen: seen.add(mod) for item in ((depth+1, name, filename) for submod in (getattr(mod, dep) for dep in dir(mod)) if type(submod) is type(mod) for depth, name, filename in mod_tree(submod, seen)): yield item if __name__ == '__main__': main(sys.argv)