Votre problème était que vous aviez déjà le dylib chargé dans votre interprète Python. Le simple fait de la reconstruire n'affectera pas ce que vous avez chargé dans la mémoire.
Faire juste un autre LoadLibrary
Peut ou non recharger la bibliothèque, et il n'y a aucun moyen de le forcer à le faire.
Il n'y a pas non plus de moyen de décharger et de recharger les bibliothèques dans ctypes
. La raison principale est qu'il n'y a pas de moyen sûr de le faire sur toutes les plateformes - en fait, avant 10.4, OS X lui-même était une telle plate-forme. (Et Python a encore Code source actuel dans l'arbre Pour prendre en charge la pré-10,4 OS X ctypes
.) Mais aussi, essayer de proposer un modèle qui fait les choses de la manière sûre sur chaque plate-forme n'est pas exactement triviale. Alors, ctypes
n'essaie pas.
Si vous avez vraiment besoin de le faire, le _ctypes
module en dessous ctypes
Exporte généralement les fonctions nécessaires dans Python. Si vous connaissez les noms de votre plateforme, vous pouvez les trouver avec help(_ctypes)
, ou en regardant la source.
En bref, sur la plupart des plateformes POSIX modernes (y compris OS X 10.5+) _ctypes.dlclose(mydll._handle)
, pendant que sur win32, c'est _ctypes.FreeLibrary(mydll._handle)
. Dans les deux cas, si vous utilisez jamais mydll
Encore une fois (ou toutes les fonctions ou valeurs que vous en référiez), vous devriez prier pour une segfault. Vous pouvez également Segfault à la sortie. Et sur Windows, il peut ne pas libérer la bibliothèque lorsque vous le demandez, et dans certains cas, vous devez demander à la bibliothèque si elle est prête à décharger avant de le faire, et il y a des complexités de filetage, et… eh bien, lisez simplement la FreeLibrary
docs sur msdn, et bien sûr la page manuelle pour dlclose(3)
sur chaque système POSIX qui vous tient à cœur.
En général, c'est une bien meilleure idée de simplement démarrer un nouveau processus d'interprète à la place.