python - 在 Python 2.7 中安全卸载/重新加载 C++ dll(将 dll 替换为新版本)
问题描述
我在大多数其他问题的背景下问这个问题是 5-10 岁关于这个主题,并给出以下
- 视窗 7 操作系统
.pyd
在不同文件路径位置 的几个版本的编译dll,例如/ver1.0/lib/my_dll.pyd
/ver1.1/lib/my_dll.pyd
my_dll.pyd
是从辅助文件导入的from my_dll import *
,我无法控制该方法或随意更改
我可以成功在两个版本之间切换.pyd
如下
import sys
sys.path.append(r'\path\to\ver_1.0')
import my_dll # imports ver 1.0
print my_dll.release_version()
sys.path.pop(-1)
del sys.modules['my_dll'] # remove module dict ref
from IPython import get_ipython # just in case you run in iPython
get_ipython().magic('reset -sf') # need to remove history!
del my_dll # delete the import object
import _ctypes # release the library handle
import ctypes
dll = ctypes.CDLL('my_dll.pyd')
_ctypes.FreeLibrary(dll._handle) # for some reason it needs to be
_ctypes.FreeLibrary(dll._handle) # done twice.
sys.path.append(r'\path\to\ver_1.1')
import my_dll
print my_dll.release_version()
通过根据以下输出reload
重新加载 C++ 来克服失败.pyd
Version 1.0
Version 1.1
我的问题是,我留下了一个极其脆弱的 python 生态系统,几乎在任何新的函数调用时都会崩溃。
是否有更新的方法来执行此操作?
参考
解决方案
推荐阅读
- python - Scrapy xpath 无法正常工作,返回空数据
- python - 有效地迭代对象
- visual-studio-2019 - 将 __declspec(dllexport) 添加到 struct 会导致编译错误
- image - Rails 图片上传不会显示
- java - 链表,计算偶数和不均匀位置,取消递归
- mysql - 我的 UPDATE SQL 语句导致语法错误
- azure - Powershell Az Module Remove-AzAutomationAccount 不删除 RunAs 帐户
- pycharm - 如何从命令行在新的 Pycharm 窗口中打开文件
- git - 使用 Git 作为撤消重做管理器?
- html - 如何强制使用 BibTeX 密钥作为 Pandoc 和 Biber 的引用密钥?