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? Regards, Carsten Haese. -- http://mail.python.org/mailman/listinfo/python-list