あなたの問題は、あなたがすでにあなたのPythonインタープリターにディリブをロードしていることです。再構築するだけで、メモリにロードしたものには影響しません。
別のことをしているだけです LoadLibrary
ライブラリを再ロードするかもしれないし、しないかもしれないし、それを強制する方法はありません。
ライブラリをアンロードしてリロードする方法もありません ctypes
. 。主な理由は、すべてのプラットフォームで安全な方法がないことです。実際、10.4以前のOS X自体がそのようなプラットフォームであったことです。 (そして、Pythonにはまだあります ツリー内の現在のソースコード Pre-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を祈るべきです。また、出口でsegfaultすることもできます。また、Windowsでは、尋ねたときにライブラリが実際に解放されない場合があり、場合によっては、できることができる前にアンロードする準備ができているかどうかをライブラリに尋ねる必要があります。 FreeLibrary
MSDNのドキュメント、そしてもちろんのマンページ dlclose(3)
あなたが気にするすべてのPOSIXシステムで。
一般的に、代わりに新しいインタープリタープロセスを開始するだけではるかに良いアイデアです。