Sie sollten in der Lage sein, es zu tun, indem Sie das Objekt Entsorgung
mydll = ctypes.CDLL('...')
del mydll
mydll = ctypes.CDLL('...')
EDIT: Hop Kommentar ist richtig, das den Namen entbindet, aber die Garbage Collection nicht geschieht so schnell, ich in der Tat sogar bezweifle, dass es sogar die geladene Bibliothek freigibt.
Ctypes scheint nicht eine saubere Art und Weise zu schaffen, Ressourcen freizugeben, ist es nur ein _handle
Feld zum dlopen Griff bereitstellt ...
So ist die einzige Art, wie ich sehe, ein wirklich, wirklich nicht clean way, ist systemabhängig dlclose das handle, aber es ist sehr sehr unsauber, da außerdem ctypes interne verweise auf dieses handle behält. So nimmt Entladen etwas von der Form:
mydll = ctypes.CDLL('./mylib.so')
handle = mydll._handle
del mydll
while isLoaded('./mylib.so'):
dlclose(handle)
Es ist so unrein, dass ich nur überprüft, es funktioniert mit:
def isLoaded(lib):
libp = os.path.abspath(lib)
ret = os.system("lsof -p %d | grep %s > /dev/null" % (os.getpid(), libp))
return (ret == 0)
def dlclose(handle)
libdl = ctypes.CDLL("libdl.so")
libdl.dlclose(handle)
Haben Sie eine bessere Antwort gefunden als meine hässliche Art? Wenn nicht vielleicht, sollten Sie auf ihrer Mailing-Liste fragen, und wenn es nicht vorhanden ist, melden Sie es. 'del' sollte die Funktion aufrufen, um Ressourcen zu releasen! –