An alternative approach: http://pastebin.com/z6pNqFYE
or: # devpla...@gmail.com # 2011-Nov-15 # recordimports.py # my Import Hook Hack in response to: # http://groups.google.com/group/comp.lang.python/browse_thread/thread/5a5d5c724f142eb5?hl=en # as an initial learning exercise # This code needs to come before any imports you want recorded # usually just once in the initial (main) module # Of course you can excluding the if __name__ == '__main__': demo code # barely tested: # only tested with modules that had no errors on import # did not need/use/expect/try reload() # ran with Python 2.7 on Win32 # create two fake modules moda.py and modb.py and stick some imports in them ''' Exerpt from PEP 302 -- New Import Hooks ... Motivation: - __import__ gets called even for modules that are already in sys.modules, which is almost never what you want, unless you're writing some sort of monitoring tool. Note the last two words.''' # ======================================================================= # place to save Collected imports imported = [] # save old __builtins__.__import__() __builtins__.__dict__['__old_import__'] = __builtins__.__dict__['__import__'] # match __builtins__.__import__() function signature def __myimport(name, globals={}, locals={}, fromlist=[], level=-1): global imported # I don't know why this works. __name__ = locals['__name__'] __file__ = locals['__file__'] __package__ = locals['__package__'] __doc__ = locals['__doc__'] # call original __import__ module = __builtins__.__old_import__(name, globals, locals, fromlist, level) # save import module name into namespace __builtins__.__dict__[name] = module tag = (name, __name__, __file__, __package__, module) # do not append duplicates if tag not in imported: imported.append( tag ) return module # store the new __import__ into __builtins__ __builtins__.__dict__['__import__'] = __myimport # erase unneed func name del __myimport # ======================================================================= # demo if __name__ == '__main__': # import some random packages/modules import sys import moda # a test module that does some other imports import modb # a test module that does some imports from pprint import pprint # imported has name, __name__, __file__, __package__ # show each import for n, __n, __f, __p, m in imported: print n print ' ', __n print ' ', __f print ' ', __p print del n, __n, __f, __p, m print 'recordimports.py' pprint(dir(), None, 4, 1) print print 'moda.py' pprint(dir(moda), None, 4, 1) print print 'modb.py' pprint(dir(modb), None, 4, 1) # print imported print -- http://mail.python.org/mailman/listinfo/python-list