Dynamical loading of modules

Steve Holden steve at holdenweb.com
Mon Oct 3 17:37:50 EDT 2005


Carsten Haese wrote:
> 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
>>

Wouldn't

     __import__(module_name)

be better.

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC                     www.holdenweb.com
PyCon TX 2006                  www.python.org/pycon/




More information about the Python-list mailing list