Dynamical loading of modules

Carsten Haese carsten at uniqsys.com
Mon Oct 3 16:44:47 EDT 2005


On Mon, 2005-10-03 at 16:41, Carsten Haese wrote:
> On Mon, 2005-10-03 at 15:52, Jacob Kroon wrote:
> > Hi, I'm having some problems with implementing dynamical module loading. 
> > First let me
> > describe the scenario with an example:
> > 
> > modules/
> >     fruit/
> >         __init__.py
> >         apple.py
> >         banana.py
> > 
> > apple.py defines a class 'Apple', banana defines a class 'Banana'. The 
> > problem lies in the
> > fact that I want to be able to just drop a new .py-file, for instance 
> > peach.py, and not change
> > __init__.py, and it should automatically pickup the new file in 
> > __init__.py. I've come halfway
> > by using some imp module magic in __init__.py, but the problem I have is 
> > that the instantiated
> > objects class-names becomes fruit.apple.Apple/fruit.banana.Banana, whild 
> > I want it to be
> > fruit.Apple/fruit.Banana.
> > 
> > Is there a smarter way of accomplishing what I am trying to do ?
> > If someone could give me a small example of how to achieve this I would 
> > be very grateful.
> 
> How about something like this in fruit/__init__.py:
> 
> import os
> 
> fruit_dir = os.path.dirname(__file__)
> fruit_files = [x for x in os.listdir(fruit_dir) if (x[-3:]=='.py' and x!='__init__.py')]
> for fruit_file in fruit_files:
>   module_name = fruit_files[:-3]
                  ^^^^^^^^^^^ This should be fruit_file, of course.

>   exec "from %s import *" % module_name
> 
> HTH,
> 
> Carsten.





More information about the Python-list mailing list