Automatic import PEP
Georg Brandl
g.brandl-nospam at gmx.net
Fri Oct 6 13:09:55 EDT 2006
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
More information about the Python-list
mailing list