Carsten Haese wrote: > On Mon, 2005-10-03 at 17:37, Steve Holden wrote: > >>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. > > > I don't see how a working example that meets the OP's requirements can > be constructed using __import__, but that may easily be due to my lack > of imagination. How would you do it? > I was simply suggesting that you replace the exec statement with a call to __import__(). Wouldn't that work?
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/ -- http://mail.python.org/mailman/listinfo/python-list