Is there any way to unimport a library
Jean-Michel Pichavant
jeanmichel at sequans.com
Mon Nov 21 08:08:34 EST 2011
Jean-Michel Pichavant wrote:
> 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
there are missing
global lib1
global lib2
statements right before assigning lib1 and lib2.
JM
More information about the Python-list
mailing list