Automatic import of submodules

Jean-Michel Pichavant jeanmichel at sequans.com
Fri Nov 25 08:43:58 EST 2011


Massi wrote:
> Hi everyone,
>
> in my project I have the following directory structure:
>
> plugins
>     |
>     -- wav_plug
>           |
>           -- __init__.py
>           -- WavPlug.py
>     -- mp3_plug
>           |
>           -- __init__.py
>           -- Mp3Plug.py
> ...
>     -- etc_plug
>           |
>           -- __init__.py
>           -- EtcPlug.py
>
> Every .py file contain a class definition whose name is identical to
> to the file name, so in my main script I have to import each submodule
> like that:
>
> from plugins.wav_plug.WavPlug import WavPlug
> from plugins.wav_plug.Mp3Plug import Mp3Plug
>
> and so on. This is uncomfortable, since when a new plugin is added I
> have to import it too. So my question is, is it possible to iterate
> through the 'plugins' directory tree in order to automatically import
> the submodules contained in each subdirectory?
> I googled and found that the pkgutil could help, but it is not clear
> how. Any hints?
> Thanks in advance.
>
>   
Hi,

Try something like (*untested code*)

plugins = {}
classes = {}

for plugin, className in [('wav_plug', 'WavPlug'), ('mp3_plug', 'Mp3Plug')]:
    plugins[plugin] = __import__(os.path.join('plugins', plugin, className))
    classes[className] = getattr(plugins[plugin], className)

# raise a keyError if the plugin has not been imported
wav = classes['wav_plug']()


Make sure all subdirs have the __init__.py file, including the plugins 
directory.

JM



More information about the Python-list mailing list