Ich möchte ein Modul importieren, verwenden, und wenn alles fertig ist, die Modul-Datei löschen (weil ich sie nur temporär erstellt habe). Man kann aber die Modul-Datei nicht löschen, wenn man sie einmal importiert hat, weil da scheinbar ein File-Lock aufrechterhalten wird (ich verwende Windows).
Zur Erläuterung:
Code: Alles auswählen
>>>from __future__ import with_statement
>>>import imp
>>>with open(r'c:\tempmod.pyd','r') as fp:
mod = imp.load_module('tempmod',
fp,
r'c:\tempmod.pyd',
('.pyd', 'rb', imp.C_EXTENSION))
# jetzt kann ich über den Namen "mod" auf das Modul zugreifen
>>>dir(mod)
['__doc__', '__file__', '__name__', 'function'] # (mehr ist nicht dran)
>>>mod.function()
42
Code: Alles auswählen
>>>import os; os.unlink(r'c:\tempmod.pyd')
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
os.unlink('c:\\tempmod.pyd')
WindowsError: [Error 13] Zugriff verweigert: 'c:\\tempmod.pyd'
#geht nicht, also versuche ich, das Modul zu löschen
>>>del mod; import gc; gc.collect()
0
>>>os.unlink(r'c:\tempmod.pyd')
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
os.unlink('c:\\tempmod.pyd')
WindowsError: [Error 13] Zugriff verweigert: 'c:\\tempmod.pyd'
#geht noch immer nicht
Wie macht man das?