from foo.bar import *
- плохая практика, поскольку она импортирует some_module
в глобальную область.
Вы должны иметь доступ к вашему модулю через:
import foo.bar
mod = getattr(foo.bar, 'some_module')
Легко показать, что этот подход работает:
>>> import os.path
>>> getattr(os.path, 'basename')
<function basename at 0x00BBA468>
>>> getattr(os.path, 'basename\n')
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
getattr(os.path, 'basename\n')
AttributeError: 'module' object has no attribute 'basename
'
P.S. Если вы все еще заинтересованы в использовании своего вида заявления на импорт. Вам нужен eval
:
from foo.bar import *
eval('some_module')
Чтобы уточнить: использовать не только *
- импорт - это даже хуже в сочетании с eval
Так что просто используйте getattr
, он предназначен именно для таких ситуаций, как ваша.