我正在尝试创建几个 .qgs 项目文件,以便稍后由 qgis 服务器实例提供服务。为此,我需要根据请求多次启动一个新的 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()
在退出之前没有真正清理?
该代码在 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/
。