Problem with Dynamically unloading a module

lordofcode ajay.bgr at gmail.com
Wed Dec 23 04:41:27 EST 2009


Hi All

Not an expert in Python, so sorry if this sounds like a silly
question.
I went through other few threads in the mailing list but they are not
helping me much.
I have run into a problem related to dynamically loading and unloading
a module.
I need to dynamically load a module and unload it and load another
module.

For example I have many files(All files in Python are modules right?)
like mobile_1.py ,mobile_2.py, mobile_3.py  etc.. in my project folder
which contains classes and methods with same name but different
functionality.(am afraid I cannot change this structure as these files
are generated randomly by the user)

So initially when my program starts I have to load a default module. I
do this as follows:
##############################
>>MODULE_name = "mobile_1"
>>exec "from "+MODULE_name+" import *"
##############################
And use the methods defined in "mobile_1.py" file

Now as the application continues , I may have to use the methods
defined in "mobile_2.py" or "mobile_3.py" etc instead of the
previously loaded module,which I incorrectly try to do as below:
####################
>>MODULE_name = "mobile_2"
>>exec "from "+MODULE_name+" import *"
#####################
The above import does not have any impact and the methods called from
my application still pertain to mobile_1.py as its still in the
current namespace(?).
I tried below code with del(), reload() etc but could not figure it
out.
###Code to unload a dll####
>>del sys.modules[MODULE_name]    #==> does not delete the reference in namespace


1)How do I unload a module dynamically and completely remove the
references in the module so a new module with same name references can
be loaded?
2)Are there any alternative way to do the above requirement?
Currently I am working around by restarting the whole initial setup
for each new module which is unnecessary waste.Can I avoid this
"reset"?




More information about the Python-list mailing list