On Dec 14, 9:57 am, Stargaming <[EMAIL PROTECTED]> wrote: > On Tue, 11 Dec 2007 08:57:16 -0800, George Sakkis wrote:
> > Closer, but still wrong; for some weird reason, __import__ for modules > > in packages returns the top level package by default; you have to use > > the 'fromlist' argument: > > >>>> __import__('xml.dom.minidom') is __import__('xml') > > True > > >>>> __import__('xml.dom.minidom', fromlist=True) > > <module 'xml.dom.minidom' from '/usr/local/lib/python2.5/xml/dom/ > > minidom.pyc'> > > > George > > No, it's perfectly right:: > > >>> __import__('xml.dom.minidom').dom.minidom > <module 'xml.dom.minidom' from > '/usr/lib/python2.5/xml/dom/minidom.pyc'> Sure, if you remember to repeat all.the.subpackages.after.the.top. Instead of __import__ I use a more intuitive and general version that doesn't stop at module boundaries but acts as getattr() within a module: for name in ['xml', 'xml.dom', 'xml.dom.minidom', 'xml.dom.minidom.parse', 'xml.dom.minidom.parse.__name__']: print '%s: %r\n' % (name, import_name(name)) #### output xml: <module 'xml' from '/usr/local/lib/python2.5/xml/__init__.pyc'> xml.dom: <module 'xml.dom' from '/usr/local/lib/python2.5/xml/dom/ __init__.pyc'> xml.dom.minidom: <module 'xml.dom.minidom' from '/usr/local/lib/ python2.5/xml/dom/minidom.pyc'> xml.dom.minidom.parse: <function parse at 0xb7d40614> xml.dom.minidom.parse.__name__: 'parse' #=== import_name ============================= def import_name(name, globals={}, locals={}): prefix,sep,tail = name.partition('.') obj = __import__(prefix, globals, locals) is_module = True while sep: head,sep,tail = tail.partition('.') if is_module: prefix += '.' + head try: __import__(prefix, globals, locals) except ImportError: is_module = False try: obj = getattr(obj,head) except AttributeError: raise ImportError('No name %s' % name) return obj George -- http://mail.python.org/mailman/listinfo/python-list