Ваша проблема заключалась в том, что у вас уже был загружен Dylib в ваш интерпретатор Python. Просто восстановление, это не повлияет на то, что вы загрузили в память.
Просто делаю другое LoadLibrary
Может или не может перезагрузить библиотеку, и нет никакого способа заставить ее сделать это.
Также нет способа разгрузить и перезагрузить библиотеки в ctypes
. Анкет Основная причина в том, что нет безопасного способа сделать это на всех платформах - на самом деле, до 10.4 сама OS X была такой платформой. (И у Python все еще есть текущий исходный код в дереве для поддержки до 10,4 OS x в ctypes
.) Но также попытка придумать модель, которая делает вещи безопасным способом на каждой платформе, не совсем тривиальная. Так, ctypes
не пытается.
Если вам действительно нужно это сделать, _ctypes
модуль внизу ctypes
Обычно экспортирует необходимые функции в Python. Если вы знаете имена для своей платформы, вы можете найти их с help(_ctypes)
, или, глядя на источник.
Вкратце, на большинстве современных платформ POSIX (включая OS X 10,5+) это _ctypes.dlclose(mydll._handle)
, в то время как на Win32, это _ctypes.FreeLibrary(mydll._handle)
. Анкет В любом случае, если вы когда -нибудь используете mydll
Опять же (или любые функции или значения, на которые вы ссылались на него), вы должны молиться за сегфол. Вы также можете Segfault на выходе. И в Windows это может на самом деле не освободить библиотеку, когда вы спрашиваете ее, и в некоторых случаях вы должны спросить библиотеку, готово ли она разгрузить, прежде чем вы сможете это сделать, и есть сложности резьбы, и ... ну, просто прочитайте а FreeLibrary
Документы на MSDN, и, конечно dlclose(3)
На каждой системе Posix вас заботится.
В общем, гораздо лучшая идея просто запустить новый процесс переводчика.