-
Notifications
You must be signed in to change notification settings - Fork 5
migration
Evaluer le travail à faire pour adapter le plugin pour la version 3 de QGIS à venir cette année. Détailler les étapes suivies pour la migration d'un point de vue d'un développeur classique de plugin pour QGIS.
- le ticket du plugin Isogeo
- la page du wiki de QGIS dédiée à la migration : info minimale et que pour Debian ou des développeurs de QGIS (!=développeurs de plugnis pour QGIS)
- le billet de blog de GIS for Thought : plus complet et orienté développeurs de plugins
- le tweet de demadne d'informations
- l'article http://www.opengis.ch/2018/04/13/porting-qgis-plugins-to-api-v3-strategy-and-tools/
-
Windows 10 64 bits
-
QGIS est installé avec l'installeur OSGeo4W de façon à disposer du de l'OSGeo shell
-
les commandes globales sont lancées dans Powershell dans lequel Git (télécharger ici pour Windows) est accessible :
Consulter Développement>Environnement pour plus de détails.
-
Installer la version 3 de QGIS (en dév). Dans le shell OSGeo4W :
setup
-
Sélectionner "Advanced Install" >
-
Sélectionner la version de dév de QGIS :
-
Sélectionner le package Python future :
L5. Lancer l'installation
Dans le shell OSGeo4W :
python3 -m pip install -U pip setuptools wheel future qgis2to3
python3 -m pip install pb_tool
Faire la transition :
- de Python2 vers Python3
- de PyQt4 vers PyQt5
- de PyQGIS2 vers PyQGIS3
Il s'agit des tâches à accomplir avant de pouvoir activer le plugin dans QGIS3.
Pour que QGIS3 reconnaisse le plugin comme potentiellement compatible, le fichier metadata.txt
doit être modifié. Il doit y être indiqué que le plugin est compatible avec la version de QGIS dans laquelle on cherche à l'activer : "qgisMinimumVersion=3.0" et "qgisMaximumVersion=3.99".
Les 3 transitions présentées plus haut impliquent en premier lieu d'adapter les dépendances aux évolutions des librairies utilisées par le plugin. Certaines classes ont été renommées, supprimées ou déplacées d'un module à un autre. Si les dépendances ne sont pas corrigées et qu'on cherche à importer un module qui n'existe plus, l'activation du plugin dans QGIS3 est impossible.
Exemples :
-
Python2 vers Python3 :
from urllib import getproxies, unquote, urlencode from urlparse import urlparse
devient
from urllib.request import getproxies, unquote from urllib.parse import urlencode, urlparse
-
PyQt4 vers PyQt5 :
from qgis.PyQt.QtGui import QComboBox
devient
from qgis.PyQt.QtWidgets import QComboBox
-
PyQGIS2 vers PyQGIS3 :
from qgis.core import QgsDataSourceURI
devient
from qgis.core import QgsDataSourceUri
Il est nécessaire de recompiler les fichier .ui
de l'interface pour obtenir des fichiers .py
compatibles avec QGIS3. Pour ce faire, les commandes de compilation (voir make.bat
) doivent être adaptées. Il s'agit de faire appel aux outils de compilation de Qt5 (accessibles après avoir établi l'environnement de développement) afin d'obtenir des fichiers .py
faisant appel à PyQt5.
Une fois que les étapes précédentes ont été accomplies, l'interface utilisateur du plugin s'affiche dans QGIS3 mais le plugin ne fonctionne pas. La sollicitation des widgets entraîne des erreurs, souvent dues à une mauvaise utilisation des librairies (de PyQt5 et PyQGIS3 notamment).
Pour rendre le plugin compatible, il reste à modifier le code en adaptant l'utilisation des librairies à leurs évolutions. Pour ce faire :
-
Recourir sans modération aux ressources en lignes :
-
documentation de PyQGIS3 et inventaires des breaks entre les versions 2 et 3
-
documentations de Qt5 et de PyQt5
-
-
Faire des tests en dehors de l'environnement de Qgis lorsque c'est nécessaire. Les modules présents dans
tests/dev
furent en partie développés pour tester l'utilisation de PyQt5. -
Abondance de log ne nuit pas
TO DOC
Isogeo© - Isogeo plugin for QGIS - wiki