Найти в Дзене

Could not load the Qt platform plugin. Как решить эту проблему?

Оглавление

Всем привет! Это небольшие заметки программиста, вдруг кому-то пригодится.

Недавно во время разработки одного проекта на Qt, заметил одну ошибку, решение которой нашлось довольно быстро, но как оказалось оно даже не одно. Сегодня я бы хотел рассказать о найденных мною решениях и, собственно, показать их.

Ошибка возникала следующая:

"qt.qpa.plugin: Could not load the Qt platform plugin "<платформа>" in "" even though it was found."

Ошибка рассказывает нам о том, что Qt, а в моем случае PySide2, не удалось найти путь к библиотекам для текущей платформы. С такой ошибкой я столкнулся как на MacOS так и на операционных системах Linux, на Windows проект собирался без проблем.

Решение 1

Можно пойти на хитрость и сделать программную подмену системной переменной QT_QPA_PLATFORM_PLUGIN_PATH, в которой хранится путь до библиотек платформы. На Python это можно сделать следующим образом:

  • Получаем путь к каталогу, где находится пакет PySide2

dirname = os.path.dirname(PySide2.__file__)

  • Строим путь к папке 'platforms' внутри пакета PySide2

plugin_path = os.path.join(dirname, 'Qt','plugins', 'platforms')

  • Устанавливаем значение переменной среды созданный путь к плагину

os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path

Также не забываем в начале кода импортировать модуль os для взаимодействия с текущей операционной системой

import os

Также можно добавить условие чтобы установка переменной среды выполнялась только на MacOS и Linux. Код будет выглядеть следующим образом:

import sys

import os

if (sys.platform.startswith("linux")) or (sys.platform.startswith("darwin")):

dirname = os.path.dirname(PySide2.__file__)

plugin_path = os.path.join(dirname, 'Qt','plugins', 'platforms')

os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path

-2

Решение 2

Более правильное по моему мнению. Так как MacOS и Linux по части своей это Unix-подобные системы, то можно просто выполнить в консоли две команды:

export QT_QPA_PLATFORM_PLUGIN_PATH=<путь_до_папки_с_библиотеками>

export QT_PLUGIN_PATH=<путь_до_папки_с_библиотеками>

Путь до папки с библиотеками можно узнать из первого решения (plugin_path). Просто выведите в консоль эту переменную и получите путь до нужно папки.

print(plugin_path)
-3

P.S.

Для Linux, а в частности Astra Linux, по мимо установки пути в системной переменной, необходимо установить и дополнительные библиотеки:

sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev

P.S.S

Дополнительно, опять же на Astra Linux, при сборке проекта может возникать ошибка, связанная с отсутствием библиотеки libxcb-util.so.1. Решением здесь будет создание символической ссылки на уже имеющийся файл libxcb-util.so.0

sudo ln -s /usr/lib/x86_64-linux-gnu/libxcb-util.so.0 /usr/lib/x86_64-linux-gnu/libxcb-util.so.1

У меня после этих манипуляций проект начал собираться на всех трех десктопных операционных системах.

Если я что-то, по-вашему, упустил или у вас есть дополнения, милости прошу в комментарии. Всем удачи