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