| Повече ▼

Seg Faults и Instantiation Errors при изпълнение на PyQGIS на OS X

Seg Faults и Instantiation Errors при изпълнение на PyQGIS на OS X


Имам проблеми с това да стартирам PyQGIS на моята OS X. Честно казано съм много объркан, тъй като някои грешки възникват спорадично при изпълнение на същия код.

Когато опитам следното:

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

Аз или получавам един от трите сценария:

  • Грешка при сегментиране: 11 при връщане на списъка
  • Върна се празен списък
  • Или тази грешка след initQgis () ...

    QCoreApplication :: applicationDirPath: Моля, първо създайте обекта QApplication QWidget: Трябва да конструирате QApplication преди QPaintDevice

Решение, което открих, че работи, е първо да създам екземпляр на обект QgsApplication, тъй като грешката предполага нещо подобно

app = QgsApplication ([], Вярно)

Проблемът тук обаче е, че това създава графичен интерфейс, който не ми трябва - просто се опитвам да направя някои скриптове. Ако променя параметъра за създаване на False, тогава получавам грешка с initQgis () на:

QWidget: Не може да се създаде QWidget, когато не се използва GUI

Също така, в много примери, които съм намерил онлайн, не се нуждаете от стъпка за създаване ... има ли нещо фънки с моята настройка?

Използвам venv, ако това има някаква разлика ... всички команди, които искам да изпълня, работят нормално в конзолата QGIS Python, просто външният скрипт ми създава проблеми.

някакви мисли?

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


Имах и някои проблеми с това, ето моето решение за OSX 10.9.5:

импортирайте os, sys sys.path.append ('/Applications/QGis.app/Contents/Resources/python') от qgis.core import * app = QgsApplication ([], True) QgsApplication.setPrefixPath (r "/Applications/QGIS .app/Contents/MacOS ", True) QgsApplication.initQgis () слой = QgsVectorLayer ('/tmp/myshape.shp', 'test', 'ogr') слой за печат.isValid ()

Първо трябва да добавитеApplications/Qgis.app/Contents/Resources/pythonкъм ПИТОНПАТА

Първо решение извън Python

експортирайте PYTHONPATH =/Applications/Qgis.app/Contents/Resources/python # then python… # Импортирайте QGIS от qgis.core import *

Второ решение в Python

import os, sys sys.path.append ('/Applications/QGis.app/Contents/Resources/python') #Импортиране на QGIS от qgis.core import *

И в двата случая трябва да инициализирате приложението (в противен случай срив)

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

Вече можете да използвате PyQGIS

слой = QgsVectorLayer ('/Потребители/Споделено/test.shp', 'тест', 'ogr') слой.isValid () True

По същия начин можете да добавите пътя на приставките към sys, да използвате алгоритмите за обработка и ...


Гледай видеото: how to find seg faults using valgrind