Modul importieren, benutzen, dann Modul-Datei löschen
Verfasst: Donnerstag 1. November 2007, 16:35
Ich habe ein Problem:
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:
Jetzt möchte ich, weil ich fertig bin, die temporäre Modul-Datei (c:\tempmod.py) löschen:
Es gibt kein "unimport"-Statement, auch in "imp" finde ich keine Funktion, die das machen würde. Ich kann das Modul-File erst löschen, nachdem ich die interaktive Sitzung beendet habe, was unbefriedigend ist, weil ich am Ende meiner Scripts das tempöre Modul einfach wieder löschen will.
Wie macht man das?
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?