Lagi

Seg Faults dan Instantiation Errors saat menjalankan PyQGIS di OS X


Saya mengalami masalah saat menjalankan PyQGIS di OS X saya. Sejujurnya saya sangat bingung karena beberapa kesalahan terjadi secara sporadis saat menjalankan kode yang sama.

Ketika saya mencoba yang berikut ini:

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

Saya mendapatkan salah satu dari tiga skenario:

  • Kesalahan segmentasi: 11 saat mengembalikan daftar
  • Daftar kosong dikembalikan
  • Atau kesalahan ini setelah initQgis()…

    QCoreApplication::applicationDirPath: Harap buat instance objek QApplication terlebih dahulu QWidget: Harus membuat QApplication sebelum QPaintDevice

Solusi yang saya temukan berhasil adalah membuat instance objek QgsApplication terlebih dahulu seperti yang disarankan oleh kesalahan dengan sesuatu seperti

aplikasi = QgsApplication([], Benar)

Namun, masalahnya di sini adalah ini menciptakan GUI yang tidak saya perlukan - saya hanya mencoba melakukan beberapa skrip. Jika saya mengubah parameter instantiasi ke False, maka saya mendapatkan kesalahan dengan initQgis() dari:

QWidget: Tidak dapat membuat QWidget saat tidak ada GUI yang digunakan

Juga, dalam banyak contoh yang saya temukan online, Anda tidak memerlukan langkah instantiasi… apakah ada sesuatu yang funky dengan pengaturan saya?

Saya menggunakan venv jika itu membuat perbedaan… semua perintah yang ingin saya jalankan bekerja secara normal di konsol QGIS Python, hanya skrip eksternal yang memberi saya masalah.

Ada pikiran?

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


Saya juga punya beberapa masalah dengan ini, inilah solusi saya untuk OSX 10.9.5:

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

Anda perlu menambahkan terlebih dahuluApplications/Qgis.app/Contents/Resources/pythonke PYTHONPATH

Solusi pertama di luar Python

export PYTHONPATH=/Applications/Qgis.app/Contents/Resources/python # lalu python… #Import QGIS dari qgis.core import *

Solusi kedua dengan Python

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

Dalam kedua kasus, Anda perlu menginisialisasi aplikasi (jika tidak macet)

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

Anda sekarang dapat menggunakan PyQGIS

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

Dengan cara yang sama Anda dapat menambahkan jalur plugin ke sys, menggunakan algoritma pemrosesan dan…


Tonton videonya: Segmentation fault segfault in CC++. What is it and what causes it? (Oktober 2021).