Я пытаюсь загрузить два разных модуля, которые ссылаются на отдельные версии одной и той же разделяемой библиотеки.
Вот псевдокод проблемы; где 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, чтобы его можно было использовать с разными модулями?
Edit:
Чтобы быть более точным с вопросом. Python загружает в общую библиотеку в память. Когда я пытаюсь импортировать другой модуль, который ссылается на другую общую библиотеку с тем же именем, кажется, что python не загружается в эту новую общую библиотеку. Почему это произошло?