On Fri, Mar 16, 2012 at 4:04 PM, Andrea Crotti <andrea.crott...@gmail.com> wrote: >> You want to monkeypatch __builtin__.__import__() instead. It always gets >> called. >> > > Seems like a good idea :) > > My first attempt failes though > > > def full(module): > from __builtin__ import __import__ > ls = [] > orig = __import__ > > def my_import(name): > ls.append(name) > orig(name) > > __import__ = my_import > __import__(module) > __import__ = orig > return ls > > > it imports only the first element and doesn't import the dependencies.. > Any hints?
You didn't actually monkey-patch it. You just created a local called __import__ that stores a wrapped version of the function. You need to actually replace it in the __builtin__ module: import __builtin__ __builtin__.__import__ = my_import Cheers, Ian -- http://mail.python.org/mailman/listinfo/python-list