Suite

Défauts de segmentation et erreurs d'instanciation lors de l'exécution de PyQGIS sur OS X

Défauts de segmentation et erreurs d'instanciation lors de l'exécution de PyQGIS sur OS X


J'ai du mal à démarrer avec l'exécution de PyQGIS sur mon OS X. Je suis franchement très confus car certaines erreurs se produisent sporadiquement lors de l'exécution du même code.

Quand j'essaye ce qui suit :

QgsApplication.setPrefixPath('/Applications/QGIS.app/Contents/MacOS', True) QgsApplication.initQgis() QgsProviderRegistry.instance().providerList()

J'obtiens l'un des trois scénarios suivants :

  • Défaut de segmentation : 11 lors du retour de la liste
  • Une liste vide renvoyée
  • Ou une cette erreur après initQgis()…

    QCoreApplication::applicationDirPath : veuillez d'abord instancier l'objet QApplication QWidget : doit construire une QApplication avant un QPaintDevice

Une solution de contournement que j'ai trouvée efficace consiste à instancier d'abord un objet QgsApplication, car l'erreur le suggère avec quelque chose comme

app = QgsApplication([], Vrai)

Cependant, le problème ici est que cela crée une interface graphique dont je n'ai pas besoin - j'essaie juste de faire des scripts. Si je change le paramètre d'instanciation sur False, j'obtiens une erreur avec initQgis() de :

QWidget : impossible de créer un QWidget lorsqu'aucune interface graphique n'est utilisée

De plus, dans de nombreux exemples que j'ai trouvés en ligne, vous n'avez pas besoin de l'étape d'instanciation… y a-t-il quelque chose de génial avec ma configuration ?

J'utilise un venv si cela fait une différence… toutes les commandes que je veux exécuter fonctionnent normalement dans la console QGIS Python, c'est juste le script externe qui me pose des problèmes.

Des pensées?

Python : 2.7.10, QGIS : 2.10.1-Pise, OS X : 10.10.3


J'ai également eu quelques problèmes avec cela, voici ma solution pour OSX 10.9.5 :

importer os, sys sys.path.append('/Applications/QGis.app/Contents/Resources/python') depuis qgis.core import * app = QgsApplication([],True) QgsApplication.setPrefixPath(r"/Applications/QGIS .app/Contents/MacOS", True) QgsApplication.initQgis() layer = QgsVectorLayer('/tmp/myshape.shp', 'test', 'ogr') print layer.isValid()

Vous devez d'abord ajouterApplications/Qgis.app/Contents/Resources/pythonau PYTHONPATH

Première solution hors Python

export PYTHONPATH=/Applications/Qgis.app/Contents/Resources/python # puis python… #Importer QGIS depuis qgis.core import *

Deuxième solution en Python

import os, sys sys.path.append('/Applications/QGis.app/Contents/Resources/python') #Importer QGIS depuis qgis.core import *

Dans les deux cas, vous devez initialiser l'application (sinon crash)

app = QgsApplication([],True) QgsApplication.setPrefixPath(r"/Applications/QGIS.app/Contents/Plugins", True) QgsApplication.initQgis()

Vous pouvez maintenant utiliser PyQGIS

layer = QgsVectorLayer('/Users/Shared/test.shp', 'test', 'ogr') layer.isValid() True

De la même manière vous pouvez ajouter le chemin des plugins à sys, utiliser les algorithmes de traitement et…


Voir la vidéo: QGIS Python PyQGIS - Select features from a vector layer