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