importing modules dynamicly
Jean-Michel Pichavant
jeanmichel at sequans.com
Tue Jan 11 06:14:18 EST 2011
dubux wrote:
> I am trying to import modules dynamicly from a directory (modules/) in
> which i have __init__.py with the __all__ variable set. Everything
> imports correctly and I have verified this however I am stuck on
> actually using my classes in the dynamicly imported modules.
>
> this bit is in my main.py (or base script) to import the modules in
> the modules/ directory:
>
> loaded_modules = []
> for item in modules:
> if item == '__init__.py': pass
> else:
> if item.endswith('.py'):
> __import__('modules.' + item[0:len(item) - 3])
> loaded_modules.append(item[0:len(item) - 3])
> else: pass
>
> After loading all the modules, i try to do something like:
>
> instance = modules.modulename.class()
>
> And I get an AttributeError. What am I doing wrong here? Help please!!
>
>
Your code is rather strange, 'modules' looks to be a list or some
iterable, and then you expect to have a 'modulename' attribute or
something...
My guess is that you pasted an approximative translation of your code
which makes it impossible de debug.
Here is a possible way of importing a bunch of python files:
loaded_modules = {}
fileNames = os.listdir('./modules')
pyFiles = [os.path.basename(name).replace('.py', '') for name in
fileNames if name.endswith('.py')]
for pyFile in pyFiles:
loaded_modules[pyFile] = __import__('modules.%s' % pyFile)
# how to get a class named 'AClassName' defined in then modules
for module in loaded_modules:
myClass = getattr(loaded_modules[module], 'AClassName', None)
print myClass
if myClass:
myInstance = myClass()
JM
More information about the Python-list
mailing list