I'm setting up a large hierarchy of module packages and using a
variable to select which of many alternative packages to import. For
example, the variable 'config.modsel' points to a particular "model
selector" package. 'config' is a module containing many such
variables.
My first attempt resulted in a confusing error message:
[color=blue][color=green][color=darkred]
>>> from config.modsel.m odelselector import ModelSelector[/color][/color][/color]
Traceback (most recent call last):
File "<pyshell#2 5>", line 1, in -toplevel-
from config.modsel.m odelselector import ModelSelector
ImportError: No module named modsel.modelsel ector
It works if I enter the literal path rather than a variable:
[color=blue][color=green][color=darkred]
>>> config.modsel[/color][/color][/color]
<module 'libs.modsel01' ... >[color=blue][color=green][color=darkred]
>>> from libs.modsel01.m odelselector import ModelSelector
>>> ModelSelector[/color][/color][/color]
<class libs.modsel01.m odelselector.Mo delSelector at 0x009F68D0>
I need to use a variable, however. The best I can come up with is:
[color=blue][color=green][color=darkred]
>>> exec('from '+ config.modsel._ _name__ +'.modelselecto r import ModelSelector')
>>>[/color][/color][/color]
Is this the best we can do with current Python syntax?
Should we think about suggesting a better syntax? I think the
fundamental problem is the confusion that arises from using '.' as
both a path separator and an attribute qualifier.
-- Dave
variable to select which of many alternative packages to import. For
example, the variable 'config.modsel' points to a particular "model
selector" package. 'config' is a module containing many such
variables.
My first attempt resulted in a confusing error message:
[color=blue][color=green][color=darkred]
>>> from config.modsel.m odelselector import ModelSelector[/color][/color][/color]
Traceback (most recent call last):
File "<pyshell#2 5>", line 1, in -toplevel-
from config.modsel.m odelselector import ModelSelector
ImportError: No module named modsel.modelsel ector
It works if I enter the literal path rather than a variable:
[color=blue][color=green][color=darkred]
>>> config.modsel[/color][/color][/color]
<module 'libs.modsel01' ... >[color=blue][color=green][color=darkred]
>>> from libs.modsel01.m odelselector import ModelSelector
>>> ModelSelector[/color][/color][/color]
<class libs.modsel01.m odelselector.Mo delSelector at 0x009F68D0>
I need to use a variable, however. The best I can come up with is:
[color=blue][color=green][color=darkred]
>>> exec('from '+ config.modsel._ _name__ +'.modelselecto r import ModelSelector')
>>>[/color][/color][/color]
Is this the best we can do with current Python syntax?
Should we think about suggesting a better syntax? I think the
fundamental problem is the confusion that arises from using '.' as
both a path separator and an attribute qualifier.
-- Dave
Comment