En Sat, 19 Sep 2009 17:06:11 -0300, Gabriel Rossetti <gabriel.rosse...@arimaz.com> escribió:

Hello everyone,

I'd like to ba able to import a package and have it's __init__ conditionally import a subpackage. Suppose that you have this structure :

mybase/
mybase/__init__.py
mybase/mypkg
mybase/mypkg/__init__.py
mybase/mypkg/module0.py
mybase/mypkg/type1
mybase/mypkg/type1/__init__.py
mybase/mypkg/type1/module1.py
mybase/mypkg/type1/module2.py
mybase/mypkg/type2
mybase/ mypkg/type2/__init__.py
mybase/ mypkg/type2/module1.py
mybase/ mypkg/type2/module2.py

I'd like to do something like th following in my code

 >>> import mybase
 >>> mybase.setType("type1")
 >>> from mybase.mypkg import module0, module1, module2
 >>> module0.__file__
'mybase/mypkg/module0.pyc'
 >>> module1.__file__
'mybase/mypkg/type1/module1.pyc'
 >>> module2.__file__
'mybase/mypkg/type1/module2.pyc'

but I can't figure out how to do this.

That depends on how dynamic you want/have to be.

(inside mybase/mypkg.__init__py):

def setType(type_):
  global module1, module2
  if type_ == 'type1':
    from .type1 import module1, module2
  elif type_ == 'type2':
    from .type2 import module1, module2
  else:
    raise ValueError, 'unknown type: %s' % type_

A more generic version:

def setType(type_):
  global module1, module2
  t = __import__(type_, globals(), locals(), ['module1','module2'], 1)
  module1 = t.module1
  module2 = t.module2

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to