我尝试加载两个不同的模块,它们链接到同一共享库的不同版本。
这是问题的伪代码;其中UserModule需要与初始模块相同的库和符号。
# dummy load initial module
import ctypes
ctypes.CDLL('/path/to/different/libname.so')
# load another module
import UserModule
ImportError:/path/to/UserModule/libUserModule.so:未定义符号
我可以使用ctypes.CDLL('libdl.so')。dlclose()删除初始共享库,然后加载下一个库。但是我想要一种将它们同时加载到内存中的方法,而不会造成这种混乱。
我也尝试使用
# try to load memory locally
import sys
import DLFCN
sys.setdlopenflags( DLFCN.RTLD_NOW | DLFCN.RTLD_LOCAL )
# dummy load initial module
import ctypes
ctypes.CDLL('/path/to/different/libname.so')
# load another module
import UserModule
但是它失败并出现相同的错误。
有什么方法可以将具有相同名称的模块加载到python的内存中,以便可以与其他模块一起使用?
编辑: 更确切地说是问题。 Python将共享库加载到内存中。当我尝试导入链接到具有相同名称的另一个共享库的另一个模块时,似乎在该新共享库中未加载python。为什么会这样?