avoid import short-circuiting
Ian Kelly
ian.g.kelly at gmail.com
Fri Mar 16 18:18:07 EDT 2012
On Fri, Mar 16, 2012 at 4:04 PM, Andrea Crotti
<andrea.crotti.0 at 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
More information about the Python-list
mailing list