Dan Bishop wrote:
> On Sep 22, 10:09 pm, Connelly Barnes <connellybar... at yahoo.com> wrote:
>> Hi,
>>>> I wrote the 'autoimp' module [1], which allows you to import lazy modules:
>>>> from autoimp import * (Import lazy wrapper objects around all modules; "lazy
>> modules" will turn into normal modules when an attribute
>> is first accessed with getattr()).
>> from autoimp import A, B (Import specific lazy module wrapper objects).
>>>> The main point of autoimp is to make usage of the interactive Python prompt
>> more productive by including "from autoimp import *" in the PYTHONSTARTUP file.
>> And it does. Gets rid of "oops, I forgot to import that module"
> moments without cluttering my $PYTHONSTARTUP file with imports. +1.
>> My only complaint is that it breaks globals().
And startup takes quite long the first time, because a list of all available
modules must be gathered.
To work around that, one can either use a special importing "lib" object,
defined like that:
class _lib:
def __getattr__(self, name):
return __import__(name)
lib = _lib()
or modify the globals() to automatically look up modules on KeyError, like this
(put into PYTHONSTARTUP file):
import sys, code
class LazyImpDict(dict):
def __getitem__(self, name):
try:
return dict.__getitem__(self, name)
except KeyError:
exc = sys.exc_info()
try:
return __import__(name)
except ImportError:
raise exc[0], exc[1], exc[2]
d = LazyImpDict()
code.interact(banner='', local=d)
sys.exit()
Of course, this is not perfect as it may break quite a lot of things,
I haven't tested it thoroughly.
Georg