At 10:34 AM 4/13/2006 -0500, Ian Bicking <[EMAIL PROTECTED]> wrote:
>And even if that wasn't a problem, it means mpz would be eagerly loaded
>along with NumPy even if it wasn't needed.  Or if you had to manually
>import this operator.add-glue, then if you forget it is likely to be
>difficult to debug, because there's no *bad* code, just code that is
>missing.

PEAK addresses this problem with a decorator:

     @whenImported('mpz')
     def setup_for_ mpz(mpz):
         @operator.add.register(...)
         def ...

The 'whenImported' function checks to see if mpz is already present in 
sys.modules.  If so, it calls the function immediately, passing in the 
named module.  If not, it puts an object in sys.modules whose 
__getattribute__ tries to actually import the module and then calls back 
any registered functions, so that anybody else importing mpz will get the 
real module.

I've actually been using this for a few years now, as the eager-vs.-lazy 
problem is independent of setuptools and package activation.  It comes up 
any time you want to offer support for something without creating a 
dependency on it.

_______________________________________________
Python-3000 mailing list
Python-3000@python.org
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe: 
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com

Reply via email to