Il tuo problema era che avevi già caricato dylib nel tuo interprete Python.La semplice ricostruzione non influirà su ciò che hai caricato in memoria.
Ne faccio solo un altro LoadLibrary
può o meno ricaricare la libreria e non c'è modo di forzarla a farlo.
Inoltre, non è possibile scaricare e ricaricare le librerie ctypes
.Il motivo principale è che non esiste un modo sicuro per farlo su tutte le piattaforme: infatti, prima della 10.4, OS X stesso era una di queste piattaforme.(E Python lo ha ancora codice sorgente corrente nell'albero per supportare OS X precedente alla 10.4 ctypes
.) Ma anche cercare di elaborare un modello che faccia le cose in modo sicuro su ogni piattaforma non è esattamente banale.COSÌ, ctypes
non ci prova.
Se hai davvero bisogno di farlo, il _ctypes
modulo sottostante ctypes
generalmente esporta le funzioni necessarie in Python.Se conosci i nomi della tua piattaforma, puoi trovarli con help(_ctypes)
, o guardando la fonte.
In breve, sulla maggior parte delle moderne piattaforme POSIX (incluso OS X 10.5+) lo è _ctypes.dlclose(mydll._handle)
, mentre su Win32 lo è _ctypes.FreeLibrary(mydll._handle)
.In entrambi i casi, se mai lo utilizzerai mydll
di nuovo (o qualsiasi funzione o valore a cui fai riferimento), dovresti pregare per un segfault.Puoi anche eseguire il segfault all'uscita.E su Windows, potrebbe non liberare effettivamente la libreria quando lo chiedi, e in alcuni casi devi chiedere alla libreria se è pronta per essere scaricata prima di poterlo fare, e ci sono complessità di threading, e... beh, basta leggere IL FreeLibrary
documenti su MSDN e, naturalmente, la manpage per dlclose(3)
su ogni sistema POSIX che ti interessa.
In generale, è invece un'idea molto migliore avviare semplicemente un nuovo processo di interpretariato.