QGIS Plugins mit Python: Unterschied zwischen den Versionen

Aus Geoinformation HSR
Wechseln zu: Navigation, Suche
(How to publish a plugin)
(How to publish a plugin)
Zeile 174: Zeile 174:
 
** The version needs to be different to the previous one in order for the upload to work.
 
** The version needs to be different to the previous one in order for the upload to work.
 
** If needed change the experimental flag from true to false. Experimental plugins won't be shown in the QGIS plugin list by default.
 
** If needed change the experimental flag from true to false. Experimental plugins won't be shown in the QGIS plugin list by default.
 +
** It is recommended to have an Icon set for the plugin. Its max. size does not seem to be specified.
 
* Remove all files from the directory you want to upload that are not needed for the plugin to run(e.g. *.pyc files, files and folders from IDEs, .gitignore etc.).
 
* Remove all files from the directory you want to upload that are not needed for the plugin to run(e.g. *.pyc files, files and folders from IDEs, .gitignore etc.).
 
* File names can only contain ASCII characters in order for the upload to work. Characters like Umlauts in file names will cause an Error when uploading.
 
* File names can only contain ASCII characters in order for the upload to work. Characters like Umlauts in file names will cause an Error when uploading.

Version vom 29. Mai 2015, 10:03 Uhr

QGIS Plugins mit Python - PyQGIS

Siehe auch: QGIS for Devs, QGIS, QGIS - Tipps und Tricks, Python (QGIS nutzt Python 2.7)

Allgemeines

Wichtige Informationen:

  • Dokumentation/Tutorials: PyQGis Cookbook (QGIS Documentation), insbesondere Kap. 'Developing Python Plugins' (PyQGIS, QT4, Eclipse, Eclipse PyDev)
  • QGIS-Python-Plugin-Verzeichnis: C:\Documents and Settings\<username>\.qgis\python\plugins (Windows).
  • QTDesigner unter Windows ist nun Bestandteil von der QT IDE QTCreator.

QGIS Plugins mit Python:

Manuelles Installieren eines Python-Plugins myPlugin:

  • Download myPlugin.zip.
  • Auspacken von myPlugin in einem temporären Verzeichnis; nun sollte ein Ordner myPlugin/ vorhanden sein.
  • Den Ordner myPlugin ins QGIS-Python-Plugin-Verzeichnis kopieren.
  • QGIS (neu) starten und "Erweiterungen verwalten..." wählen. Dort sollte ein neuer Eintrag stehen => ankreuzen.

Plattform-unabhängiges Programmieren

Auf was ist bei der plattform-unabhängigen Programmieren zu achten?

UX Guidelines

Siehe QGIS_for_Devs#UX_Guidelines (GUI)

Eclipse/PyDev

Wie kann man Eclipse mit PyDev zum Entwickeln von QGIS-Plugins (QT4) aufsetzen inklusive Unit-Testing und Debugging (gem. [1] )?

Installation Eclipse

  • Download minimalstes Eclipse 3.x, sprich nur Eclipse Platform Runtime Binary, welches leider nicht direkt auf der Hauptseite verfügbar ist
  1. http://download.eclipse.org/eclipse/downloads/eclipse3x.php
  2. -> Latest Release
  3. Zur Platform Runtime Binary Sektion navigieren und entsprechenden Download starten
  4. Installation

Einrichten Eclipse

  • Installation/Einrichten des Eclipse Marketplace
  1. Eclipse starten
  2. Help->Install New Software
  3. Indigo - http://download.eclipse.org/releases/indigo als Quelle auswählen
  4. Im Filter Feld Market eingeben
  5. Marketplace Client auswählen und installieren
  • Installation PyDev
  1. Help->Eclipse Marketplace...
  2. Im Suchfeld nach pydev suchen
  3. PyDev - Python IDE for Eclipse installieren
  4. Konfiguration nach Eclipse Neustart:
  5. Window->Preferences
  6. PyDev->Interpreter - Python für Linux oder PyDev->Interpreter - Iron Python und dann Auto Config wählen
Hinweis
PyDev und den eingebauten Debugger kennen lernen: http://www.vogella.de/articles/Python/article.html
  • Optional: Sourcecontrol EGit einrichten
  1. Help->Eclipse Marketplace...
  2. Im Suchfeld nach egit suchen
  3. EGit - Git Team Provider auswählen und installieren
  • CDT
  1. Help->Install New Software
  2. Indigo - http://download.eclipse.org/releases/indigo als Quelle auswählen
  3. In der Kategorie Programming Languages C/C++ Development Tools auswählen und installieren
  • Python und QT4
  1. Folgende Pakete müssen für Linux, am Beispiel Ubuntu, installiert werden um mit qt4 und sqlite arbeiten zu können
    1. python-qt4-sql
    2. python-qt4-dev
    3. libqt4-dev
    4. libqt4-sql-sqlite
    5. qt4-dev-tools
    6. qt4-doc-html
    7. pyqt4-dev-tools
  • Installation Eclipse Plugin
  1. Download von http://qt.nokia.com/products/eclipse-integration/
Hinweis
Um die qt-Umgebung, sprich Designer etc. kennen zu lernen, ist das eingebaute Eclipse-CheatSheet sehr gut geeignet. Eclipse->Help->Cheat Sheets...
Ein Wiki mit vielen Tutorials gibts hier: http://diotavelli.net/PyQtWiki/Tutorials

Eine alternative Anleitung zur Installation gibts hier: http://popdevelop.com/2010/04/setting-up-ide-and-creating-a-cross-platform-qt-python-gui-application/

  • QGIS installieren
  1. Nach Anleitung von http://www.qgis.org/wiki/Download vorgehen
  2. Zur Entwicklung libqgis-dev zusätzlich installieren

Debugging von Python-QGIS-Plugins mit Eclipse

Warum ist das Debugging von Plugins nicht so einfach wie bei einem Python-Programm?
Grund dafür ist, dass bei Plugins ein weiterer Prozess, also nicht unser Plugin-Code, die Lebensdauer unseres Codes bestimmt. Das heisst, dass wir in den wenigsten Fällen direkt in den Programmcode des 'Host'-Prozesses eingreifen können um an der Stelle zu warten, an welcher unser Plugin zum Einsatz kommt.
Wie verbinden wir nun den Eclipse-PyDev-Debugger und ein QGIS-Plugin?
Die Lösung die PyDev hierzu anbietet, verwendet einen sogenannten Remote-Debugger. Dabei agiert Eclipse-PyDev als Server, welcher auf einem bestimmten Port (Default ist 5678) auf eine Verbindung eines entsprechend ausgerüsteten Python-Programmes wartet. Sobald die Verbindung zu Stande gekommen ist können wir wie gewohnt debuggen.

Remote-Debugger / Debug Server

Als erstes wechseln wir in die Debug Perspektive von Eclipse. Dadurch erhalten wir zwei zusätzliche Symbole im Toolbar
Toolbar Icons
, welche uns erlauben den Remote-Debugger zu Starten/Stoppen. Alternativ dazu können wir den Debug-Server im Menu Pydev->Start/End Debug Server kontrollieren. Wir starten nun den Remote-Debugger durch anklicken des entsprechenden Symbols oder im Menu Pydev->Start Debug Server. In der Konsole wird nun ausgegeben
Console output
, auf welchem Port der Debug Server auf eine Verbindung wartet. Der Port kann in den allgemeinen PyDev Einstellungen unter Debug angepasst werden.

Anpassungen im Python-Plugin Code

Damit unser Plugin mit dem Debug Server verbinden kann müssen wir den folgenden Code einbauen, am besten direkt nach den üblichen Module Imports von Python

#...

import os
from os import *
pydevPysrcPath = os.environ.get('ECLIPSE_PYSRC_PATH', '')
if pydevPysrcPath:
    if os.path.exists(pydevPysrcPath):
        import sys
        sys.path.append(pydevPysrcPath)
        import pydevd
        pydevd.settrace()
    else:
        print "Specified ECLIPSE_PYSRC_PATH [%s] does not exist" % (pydevPysrcPath)

#...

Damit haben wir die Möglichkeit den Eclipse-Debug-Server nur dann zu kontaktieren, wenn wir auch die entsprechende Umgebungsvariable ECLIPSE_PYSRC_PATH gesetzt haben. Dies funktioniert natürlich nur dann, wenn wir auch die 'Host'-Applikation aus dieser Konsole starten.

Beispielaufruf in der Konsole (Linux)
~$ export ECLIPSE_PYSRC_PATH=/opt/eclipse/plugins/org.python.pydev.debug_2.2.3.2011100616/pysrc/
~$ qgis &
Beispiel (Windows)
  • Die Umgebungsvariable ECLIPSE_PYSRC_PATH setzen und QGIS starten.
  • Dazu gibt es zwei Möglichkeiten: 1. Batchdatei mit folgendem Inhalt (dann diese Batchdatei ausführen):
set ECLIPSE_PYSRC_PATH=/opt/eclipse/plugins/org.python.pydev.debug_2.2.3.2011100616/pysrc/" 
qgis.exe
  • oder ECLIPSE_PYSRC_PATH dauerhaft als Systemvariable eintragen und QGIS mittels Doppelklick auf Icon - oder aus dem Startmenü- starten.
Weiterführende Informationen
remote-debugging: http://pydev.org/manual_adv_remote_debugger.html

Testing von PyQT Apps

How to publish a plugin

Preparation:

  • Check if all attributes in the metadata.txt file are in order:
    • The version needs to be different to the previous one in order for the upload to work.
    • If needed change the experimental flag from true to false. Experimental plugins won't be shown in the QGIS plugin list by default.
    • It is recommended to have an Icon set for the plugin. Its max. size does not seem to be specified.
  • Remove all files from the directory you want to upload that are not needed for the plugin to run(e.g. *.pyc files, files and folders from IDEs, .gitignore etc.).
  • File names can only contain ASCII characters in order for the upload to work. Characters like Umlauts in file names will cause an Error when uploading.
  • The plugin directory can't contain hyphens in its name (if it does the plugin might still work in QGIS but it will show an error message).
  • ZIP your plugin directory.

Upload: