Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #21782 > unrolled thread

Re: avoid import short-circuiting

Started byAndrea Crotti <andrea.crotti.0@gmail.com>
First post2012-03-16 22:04 +0000
Last post2012-03-16 22:04 +0000
Articles 1 — 1 participant

Back to article view | Back to comp.lang.python

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: avoid import short-circuiting Andrea Crotti <andrea.crotti.0@gmail.com> - 2012-03-16 22:04 +0000

#21782 — Re: avoid import short-circuiting

FromAndrea Crotti <andrea.crotti.0@gmail.com>
Date2012-03-16 22:04 +0000
SubjectRe: avoid import short-circuiting
Message-ID<mailman.739.1331935463.3037.python-list@python.org>
On 03/16/2012 05:19 PM, Robert Kern wrote:
> On 3/16/12 4:49 PM, Andrea Crotti wrote:
>> I started the following small project:
>>
>> https://github.com/AndreaCrotti/import-tree
>>
>> because I would like to find out what exactly depends on what at 
>> run-time, using
>> an import hook.
>>
>> It works quite well for small examples but the main problem is that 
>> once a
>> module is imported
>> it's added to sys.modules and then it doesn't go through the import 
>> hook anymore.
>>
>> I tried to mess around with sys.modules but it might not be a good 
>> idea, and it
>> leads to easy
>> infinite loops.
>> Is there a good way to achieve this?
>> I guess I could do the loop detection myself, but that should not be 
>> too hard..
>
> 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?

[toc] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web