即使在 exitQgis() 之后第二次创建 PyQGIS 独立应用程序后出现分段错误 - Debian

Segmentation Fault after creating PyQGIS standalone application the second time even after exitQgis() - Debian

我正在尝试创建几个 .qgs 项目文件,以便稍后由 qgis Server 实例提供服务。 为此,我需要根据要求多次启动新的 PyQGIS 应用程序。应用程序 运行 第一次 顺利地被调用 ,但是如果我尝试 运行 它 第二次 我收到分段错误错误。

这是触发问题的示例代码:

from qgis.core import QgsApplication
import os

os.environ["QT_QPA_PLATFORM"] = "offscreen"

for i in range(2):
    print(f'Iteration number {i}')

    print('\tSet prefix path')
    QgsApplication.setPrefixPath('/usr', False)    
    
    print('\tInstantiating application')
    qgs = QgsApplication([], False)
    
    print('\tInitializing application')
    qgs.initQgis()
    
    print('\tExiting')
    qgs.exitQgis()

执行时,我得到以下输出:

Iteration number 0
        Set prefix path
        Instantiating application
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
        Initializing application
        Exiting
Iteration number 1
        Set prefix path
        Instantiating application
        Initializing application
Segmentation fault

如果我将循环的内容包含在一个函数中并多次调用它,就会发生类似的情况。在这种情况下,分段错误发生在第二次调用 qgs.exitQgis() 时(并且在此之前添加的任何矢量或栅格图层都是无效的)。

也许问题是出于某种原因 qgs.exitQgis() 并没有在退出前真正清理?

代码 运行ning 在 Debian Bullseye 附带的 Python:3.9 docker 容器上。 按照 QGIS 文档中的说明安装了 Qgis: https://qgis.org/en/site/forusers/alldownloads.html#debian-ubuntu。 QGIS 版本是 QGIS 3.22.3-Białowieża 'Białowieża'.

为了防止加载时出现导入错误 qgis.core 我必须设置环境变量 PYTHONPATH = /usr/lib/python3/dist-packages/

更新:根据关于此 post 的一条评论的建议:
https://gis.stackexchange.com/questions/250933/using-exitqgis-in-pyqgis,
我将 qgs.exitQgis() 替换为 qgs.exit(),现在应用程序可以再次实例化任意次数而不会崩溃。

目前还不清楚导致分段错误的原因,但至少我找到了这个解决方法。

问题似乎在 QGIS 版本中已修复。 3.24 蒂斯勒。现在可以在循环中调用 qgs.exitQgis() 而不会触发分段错误。