dynamic import/reload of modules
quinn at retch.ugcs.caltech.edu
Tue Aug 7 21:08:30 CEST 2001
On Tue, 07 Aug 2001 10:54:34 GMT, Thomas Weholt <thomas at gatsoft.no> wrote:
>Say I got a folder-structure like this :
>they both contain two files:
>The handler.py contains a class handlerclass, that's different for each of
>the handler files
>How can I import the handler.py module for each folder, be able to reload it
>and create object-instances from them?
>I want to be able to say 'mymodules.reload()' and reload them too.
>The point is to be able to easily create and import several modules into a
>server without stopping the server itself. I want to be able to create a
>folder in the /home/thomas/dev/modules-folder, put to files into it, call
>reload on the server and have the modules available inside the running
>server. I cannot know what the folder inside /home/thomas/dev/modules will
>be called, but it will contain a handler.py defining a handlerclass-object
>and a __init__.py ( if that's necessary ).
>Any clues or pointers?
>It's for use in medusa. I want to be able to dynamically define handlers
>that processes requests, and reload them.
I think you're interested in __import__ or the imp module. This is untested,
off the top of my head. You shouldn't need __init__.py for this.
def __init__(self, directory):
self.directory = directory
self.handlers = 
for fn in os.listdir(self.directory):
if not fn.endswith('.py'):
fn = os.path.join(self.directory, fn)
('.py', 'r', imp.PY_SOURCE))))
# for example
def handler(self, data):
for m in self.handlers:
return [ h.__name__ for h in self.handlers ]
I don't remember if imp.load_module tries to cache in sys.modules, but if it
does, you may want to find a way that doesn't or remove it from the cache.
More information about the Python-list