Dynamical loading of modules
Carsten Haese
carsten at uniqsys.com
Mon Oct 3 16:41:48 EDT 2005
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]
exec "from %s import *" % module_name
HTH,
Carsten.
More information about the Python-list
mailing list