Я реализую qgis 3.4.3 в пользовательском приложении, но когда я создаю экземпляр класса QgsApplication (), я получаю сообщение об ошибке «Не удалось найти подключаемый модуль платформы Qt« Windows »в» ».
Я пытался использовать различные установки qgis 3.x +, включая автономный установщик и веб-установщик OSGeo4W. В настоящее время я придерживаюсь установки веб-установщика OSGeo4W. Я использую установку Python 3.7 отдельно от того, что поставляется с OSGeo4W, и пытаюсь интегрировать функциональность qgis.
Я следовал инструкциям в следующем справочном документе QGIS в разделе: «Использование PyQGIS в пользовательских приложениях»
https://docs.qgis.org/2.18/en/docs/pyqgis_developer_cookbook/intro.html#run-python-code-when-qgis-starts
После попытки запустить скрипт я понял, что отсутствует плагин dll. После некоторых исследований я обнаружил, что qwindows.dll использует qt. Файл qwindows.dll включен в установку OSGeo4W по адресу: C: \ OSGeo4W \ apps \ Qt5 \ plugins \ platform
Я изменил переменную QT_PLUGIN_PATH в локальной командной строке, чтобы включить каталог выше, но та же ошибка преобладала. Я также изменил переменную QT_DEBUG_PLUGINS на 1, которая распечатывает местоположения, которые Qt ищет плагины. Интересно, что он не искал плагины в пути, который я указал в переменной QT_PLUGIN_PATH.
Код Python:
import sys
#add qgis python libraries to instance python path in case not added
#at the environment variable %PYTHONPATH% level
sys.path.extend(['C:\\OSGeo4W\\apps\\qgis\\python',
'C:\\OSGeo4W\\apps\\Python37\\Lib\\site-packages'])
from qgis.core import *
# supply path to qgis install location
QgsApplication.setPrefixPath('C:\\OSGeo4W\\apps\\qgis', True)
# create a reference to the QgsApplication
# setting the second argument to True enables the GUI, which we need to do
# since this is a custom application
qgs = QgsApplication([], True)
# load providers
qgs.initQgis()
# Write your code here to load some layers, use processing algorithms, etc.
# When your script is complete, call exitQgis() to remove the provider and
# layer registries from memory
qgs.exitQgis()
Код командного файла для запуска запроса Cmd с правильными переменными:
@echo off
SET OSGEO4W_ROOT=C:\OSGeo4W
::Include environment variables set by qgis on startup
call %OSGEO4W_ROOT%\bin\o4w_env.bat
call %OSGEO4W_ROOT%\bin\qt5_env.bat
call %OSGEO4W_ROOT%\bin\py3_env.bat
@echo off
path %PATH%;%OSGEO4W_ROOT%\apps\qgis\bin
path %PATH%;C:\OSGeo4W\apps\Qt5\bin
path %PATH%;C:\OSGeo4W\apps\Python37\Scripts
path %PATH%;C:\OSGeo4W\apps\Python37
set PYTHONPATH=%PYTHONPATH%;%OSGEO4W_ROOT%\apps\qgis\python
set PYTHONHOME=%OSGEO4W_ROOT%\apps\Python37
set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\Qt5\plugins;%OSGEO4W_ROOT%\apps\qgis\qtplugins
set QT_DEBUG_PLUGINS=1
cmd.exe
Я ожидаю запустить скрипт python и не получу ошибок, поскольку указываю на каталог, в котором хранится отсутствующий плагин qwindows.dll. Тем не менее, я все еще получаю сообщение об ошибке отсутствующего плагина Windows.
Вот фактическое сообщение с QT_DEBUG_PLUGINS, установленным в 1:
QFactoryLoader :: QFactoryLoader () проверяет путь к каталогу "C: / OSGeo4W / apps / qgis / qtplugins / platform" ...
QFactoryLoader :: QFactoryLoader () проверяет путь к каталогу "C: / OSGeo4W / apps / Python37 / platform" ...
qt.qpa.plugin: Не удалось найти плагин платформы Qt "windows" в ""
Не удалось запустить это приложение, поскольку ни один плагин платформы Qt не мог быть инициализирован. Переустановка приложения может решить эту проблему.