У меня есть программа, которая включает в себя интерпретаторы python2 и python3.Разделяемые библиотеки libpython dlopen()
редактируются соответствующими командами, которые обеспечивают доступ к интерпретаторам, и каждый интерпретатор поддерживает свое собственное состояние.
Все это прекрасно работает, если пользователь использует только чистые модули Python или встроенные функции.Попытка загрузить расширение C (например, termios) затем жалуется на «неопределенный символ: PyExc_TypeError».Это происходит потому, что расширения C не связаны с libpython.Вышестоящий Python не считает, что это проблема .
Чтобы обойти это, я могу изменить вызовы dlopen()
в моей программе, чтобы разделяемые библиотеки libpython использовали RTLD_GLOBAL
.Однако, как только я это сделаю, попытка использовать оба интерпретатора python2 и python3 в одном и том же сеансе программы вызывает ABRT в процессе вызова Py_Initialize
для того, какой интерпретатор был вызван вторым.Использование только одного из интерпретаторов работает нормально.
Любая идея, как заставить это работать, когда расширения C не будут связаны с libpython, поэтому требуется использование RTLD_GLOBAL
?