Gelonida N wrote:
I wondered whether there is any way to un-import a library, such, that
it's occupied memory and the related shared libraries are released.
My usecase is following:
success = False
try:
import lib1_version1 as lib1
import lib2_version1 as lib2
success = True
except ImportError:
pass
if not success:
try:
import lib1_version2 as lib1
import lib2_version2 as lib2
success = True
except importError:
pass
if not success:
. . .
Basically if I am not amble to import lib1_version1 AND lib2_version1,
then I wanted to make sure, that lib1_version1 does not waste any memory
At this moment this is more a thought excercise than a real issue, but I
thought that perhaps somebody encountered this kind of issue and had an
idea how to deal with such situations.
One solution, that I could imagine is running the program a first time,
detect all existing libraries and write out a config file being use
the next time it is run, such, that immediately the right libs are imported.
Short answer for unimporting modules : Not possible (yes there is a long
one :o) ).
One approach to your problem is to test for module existence before
importing any module.
import imp
def impVersion(version)
try:
imp.find_module('lib1_version%s' % version)
imp.find_module('lib2_version%s' % version)
except ImportError:
raise
else:
lib1 = __import__('lib1_version%s' % version)
lib2 = __import__('lib2_version%s' % version)
# using a for loop to avoid to many nested try statement
for version in [1,2,3,4]:
try:
impVersion(version)
except ImportError:
continue
break
if not lib1 or not lib2:
# no lib imported
pass
Using this code allows you to import your library only if all conditions
are met, preventing you from rolling back in case of error.
Jean-Michel
--
http://mail.python.org/mailman/listinfo/python-list