You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在另一个脚本中复用基于QGIS processing工具的自定义函数?

QGIS Python脚本封装模块后processing未定义的解决方法

问题根源

自定义模块的命名空间与主脚本完全独立,主脚本中导入的processing无法被模块内的函数访问;即便模块中单独导入processing,若未正确关联QGIS内置的processing运行环境,也会触发NameError。

解决方案

方案1:在自定义模块内显式导入processing

直接在my_function.py的开头添加processing导入语句,让模块自身获取QGIS内置的processing对象:

# my_function.py
import processing

def my_func():
    # 示例:调用buffer工具
    buffer_result = processing.run(
        "native:buffer",
        {
            'INPUT': 'your_vector_layer',
            'DISTANCE': 5,
            'OUTPUT': 'memory:'
        }
    )
    return buffer_result

方案2:将processing作为参数传入函数

如果模块导入processing仍有异常,可在调用函数时把主脚本中的processing对象直接传递进去,绕开模块的导入问题:
主脚本代码:

import processing
import my_function as mf

# 传入processing对象调用函数
mf.my_func(processing)

my_function.py代码:

def my_func(processing):
    # 使用传入的processing对象执行工具调用
    processing.run("native:buffer", {...})

方案3:确保模块在QGIS Python路径中加载

若模块所在目录不在QGIS默认的Python搜索路径内,可能导致无法正确加载QGIS的processing模块。可在主脚本中手动添加路径:

import sys
import os

# 将当前脚本所在目录(即模块目录)添加到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

import processing
import my_function as mf
mf.my_func()

内容的提问来源于stack exchange,提问作者Yvanou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:27:38