Su problema era que ya tenía el Dylib cargado en su intérprete Python. Solo reconstruir, no afectará lo que ha cargado en la memoria.
Solo haciendo otro LoadLibrary
Puede o no volver a cargar la biblioteca, y no hay forma de obligarlo a hacerlo.
Tampoco hay forma de descargar y recargar bibliotecas en ctypes
. La razón principal es que no hay una forma segura de hacerlo en todas las plataformas; de hecho, antes de 10.4, OS X en sí era una plataforma. (Y Python todavía tiene Código fuente actual en el árbol para admitir antes de 10.4 OS X en ctypes
.) Pero también, tratar de crear un modelo que haga las cosas de la manera segura en cada plataforma no es exactamente trivial. Asi que, ctypes
no lo intenta.
Si realmente necesitas hacerlo, el _ctypes
módulo debajo ctypes
Generalmente exporta las funciones necesarias a Python. Si conoce los nombres de su plataforma, puede encontrarlos con help(_ctypes)
, o mirando la fuente.
Brevemente, en la mayoría de las plataformas POSIX modernas (incluida OS X 10.5+) es _ctypes.dlclose(mydll._handle)
, mientras que en Win32, es _ctypes.FreeLibrary(mydll._handle)
. En cualquier caso, si alguna vez usa mydll
Nuevamente (o cualquier función o valor a los que estuviera haciendo referencia de él), debe rezar por un Segfault. También puede Segfault on Salida. Y en Windows, es posible que en realidad no libere la biblioteca cuando se lo pida, y en algunos casos debe preguntarle a la biblioteca si está listo para descargar antes de que pueda hacerlo, y hay complejidades de subproceso, y ... bueno, solo lea la FreeLibrary
documentos en MSDN y, por supuesto, la mano de mano para dlclose(3)
en cada sistema POSIX que le importe.
En general, es una idea mucho mejor simplemente iniciar un nuevo proceso de intérprete.