كانت مشكلتك أن لديك بالفعل Dylib تم تحميله في مترجم Python الخاص بك. فقط إعادة بناء ذلك لن يؤثر على ما قمت بتحميله في الذاكرة.
مجرد القيام بآخر LoadLibrary
قد تعيد أو لا تعيد تحميل المكتبة ، ولا توجد طريقة لإجبارها على القيام بذلك.
لا توجد أيضًا طريقة لتفريغ المكتبات وإعادة تحميلها ctypes
. السبب الرئيسي هو أنه لا توجد طريقة آمنة للقيام بذلك على جميع المنصات - في الواقع ، قبل 10.4 ، كان نظام التشغيل X نفسه منصة. (وما زال بيثون لديه رمز المصدر الحالي في الشجرة لدعم ما قبل 10.4 OS X في ctypes
.) ولكن أيضًا ، فإن محاولة التوصل إلى نموذج يقوم بالأشياء بالطريقة الآمنة على كل منصة ليست تافهة تمامًا. لذا، ctypes
لا تحاول.
إذا كنت بحاجة حقًا إلى القيام بذلك ، _ctypes
وحدة تحتها ctypes
بشكل عام تصدر الوظائف اللازمة إلى بيثون. إذا كنت تعرف أسماء النظام الأساسي الخاص بك ، فيمكنك العثور عليها help(_ctypes)
, ، أو عن طريق النظر في المصدر.
باختصار ، على معظم منصات POSIX الحديثة (بما في ذلك OS X 10.5+) إنه _ctypes.dlclose(mydll._handle)
, ، بينما في Win32 ، هو كذلك _ctypes.FreeLibrary(mydll._handle)
. في كلتا الحالتين ، إذا استخدمت من أي وقت مضى mydll
مرة أخرى (أو أي وظائف أو قيم كنت تشير إليها) ، يجب أن تصلي من أجل segfault. يمكنك أيضا segfault على الخروج. وعلى Windows ، قد لا تحرر المكتبة فعليًا عند طلبها ، وفي بعض الحالات يجب عليك أن تسأل المكتبة إذا كانت جاهزة للتفريغ قبل أن تتمكن ال FreeLibrary
مستندات على MSDN ، وبالطبع manpage ل dlclose(3)
على كل نظام posix تهتم به.
بشكل عام ، إنها فكرة أفضل بكثير لبدء عملية مترجم جديد بدلاً من ذلك.