Я создаю приложение, используя Ubuntu 18.04 и PyQt 5.12.1, которые импортируют пакеты Python , сгенерированные из кода MATLAB (эти пакеты зависят от среды выполнения MATLAB).Пакеты MATLAB в Python требуют установки переменной окружения LD_LIBRARY_PATH
;без этого программа вызывает исключение при импорте сгенерированного MATLAB пакета.
Однако я обнаружил, что PyQt не может функционировать, если установлено LD_LIBRARY_PATH
.Программа работает нормально с установленной средой выполнения MATLAB, если пакет MATLAB не импортирован и LD_LIBRARY_PATH
не задано.
По подсказке установщика MATLAB Runtime я добавил это в переменные среды в моей конфигурации запуска / отладки PyCharm:
LD_LIBRARY_PATH=/usr/local/MATLAB/MATLAB_Runtime/v96/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v96/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v96/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v96/extern/bin/glnxa64
.
Это вызывает сбой вPyQt часть программы.Используя переменную окружения QT_DEBUG_PLUGINS=1
, сообщение об ошибке выглядит следующим образом:
Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "<redacted>/PyMODA/venv/bin/platforms" ...
Cannot load library <redacted>/venv/lib/python3.6/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (/usr/local/MATLAB/MATLAB_Runtime/v96/bin/glnxa64/libQt5XcbQpa.so.5: undefined symbol: _ZNK14QPlatformTheme14fileIconPixmapERK9QFileInfoRK6QSizeF6QFlagsINS_10IconOptionEE)
QLibraryPrivate::loadPlugin failed on "<redacted>/venv/lib/python3.6/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so" : "Cannot load library <redacted>/venv/lib/python3.6/site-packages/PyQt5/Qt/plugins/platforms/libqxcb.so: (/usr/local/MATLAB/MATLAB_Runtime/v96/bin/glnxa64/libQt5XcbQpa.so.5: undefined symbol: _ZNK14QPlatformTheme14fileIconPixmapERK9QFileInfoRK6QSizeF6QFlagsINS_10IconOptionEE)"
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.
Важная часть:
"Cannot load library <...>/libqxcb.so: (/usr/local/MATLAB/MATLAB_Runtime/v96/bin/glnxa64/libQt5XcbQpa.so.5: undefined symbol: _ZNK14QPlatformTheme14fileIconPixmapERK9QFileInfoRK6QSizeF6QFlagsINS_10IconOptionEE)"
Среда выполнения MATLAB поставляется libQt5XcbQpa.so.5
в /usr/local/MATLAB/MATLAB_Runtime/v96/bin/glnxa64/
, чтодолжен быть экспортирован в LD_LIBRARY_PATH
.Похоже, это используется PyQt, когда установлен LD_LIBRARY_PATH
, и это старая версия, которая несовместима с текущей версией PyQt.
Другая библиотека с таким же именем находится в /usr/lib/x86_64-linux-gnu/
и имеет контрольную сумму MD5, отличную от версии MATLAB.Однако добавление этого каталога в начало LD_LIBRARY_PATH
не помогает.Установка QT_QPA_PLATFORM_PLUGIN_PATH
также не помогает.
Есть ли способ сделать версию в /usr/lib/x86_64-linux-gnu/
более приоритетной, чем библиотека, предоставляемая MATLAB?Есть ли другой способ исправить эту проблему?