首先报错的内容如下,我的流程是为:
① Conda 创建一个 Python 环境
② 在 Conda-Python 中通过 subprocess.Popen 创建一个 QGis-Python 环境
③ 在环境中执行 Processing 方法

完整的配置一个 QGis-Python 的过程比较复杂,我封装一个交互式调用,因此比较复杂,但是原理和在 QGis 中打开 Python Console 执行 Python 代码是一致的。

上面报错信息最终定位到的执行位置在 GdalUtils.py 文件中,可执行程序指向了 gdalwarp,按 windows 代码的习惯,会从环境变量中拼接出一个路径,例如 c:\windows\system\gdalwarp.exe,然后判断文件是否存在,存在则执行。

问题就在这个环境变量,QGis 中的 gdal 在 QGis 目录下的 bin 文件夹下。而windows 拼接是从环境变量依次遍历的,查看 process monitor 结果如下:

他指向了我的 Conda-Python 的 site-packages 下的 osgeo\gdalwarp.exe,重新查看我的环境变量配置。我的处理过程是拷贝当前 Conda-Python 的环境,添加 QGis 所需的环境变量,然后启动 Python 进程。

重新查看 env["PATH"] 的内容,其中第二行指向就是我的 Conda-python 的 site-packages\osgeo。
到此问题解决,可选的解决方案为:
① 拷贝 env,然后情况 path
② 拷贝 env,将新的环境变量追加到就变量之前,覆盖旧有变量。
下面是从 subprocess 启动一个 QGis-Python 所需要配置的环境变量。
