使用在cheatsheet中找到的processing
模块的代码示例,在qgis python控制台中,我可以打印可用算法的列表。我想通过Windows框的“独立” python脚本执行相同的操作。有可能吗?
我基于"C:\OSGeo4W64\bin\python-qgis.bat"
(来自this answer)制作了Windows批处理脚本来设置环境:
@ECHO OFF
REM this batch file sets required environment variables to allow pyqgis scripts to work
REM and then runs VS Code in that environment.
set OSGEO4W_ROOT=C:\OSGeo4W64
@echo off
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
call "%OSGEO4W_ROOT%\bin\qt5_env.bat"
call "%OSGEO4W_ROOT%\bin\py3_env.bat"
@echo off
path %OSGEO4W_ROOT%\bin;%OSGEO4W_ROOT%\apps\qgis\bin;%PATH%
set QGIS_PREFIX_PATH=%OSGEO4W_ROOT:\=/%/apps/qgis
set GDAL_FILENAME_IS_UTF8=YES
set VSI_CACHE=TRUE
set VSI_CACHE_SIZE=1000000
set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\qgis\qtplugins;%OSGEO4W_ROOT%\apps\qt5\plugins
set PYTHONPATH=%OSGEO4W_ROOT%\apps\qgis\python;%PYTHONPATH%
cd /d %~dp0
SET VSCBIN=C:\Program Files\Microsoft VS Code\
call "%VSCBIN%\Code.exe" %*
然后,在运行该批处理脚本之后,我在VS Code中创建了一个与备忘单中内容相同的python脚本:
from qgis.core import QgsApplication
for alg in QgsApplication.processingRegistry().algorithms():
print("{}:{} --> {}".format(alg.provider().name(), alg.name(), alg.displayName()))
但是它不会产生任何输出。它不会产生任何错误,因此仅需一点点进展。从通过运行批处理文件"C:\OSGeo4W64\bin\python-qgis.bat"
打开的python控制台运行时,此代码也将不起作用。
我可以从其他示例中看到,我可能还需要像这样初始化QgsApplication:
from qgis.core import QgsApplication
# Supply path to qgis install location
QgsApplication.setPrefixPath("C:\\OSGeo4W64\\apps\\qgis", True)
# (not sure why the above line is needed as the batch file already sets the prefix path)
# init Qgis, but don't create the GUI
qgs = QgsApplication([], False)
qgs.initQgis()
for alg in QgsApplication.processingRegistry().algorithms():
print("{}:{} --> {}".format(alg.provider().name(), alg.name(), alg.displayName()))
但是仍然没有输出。我没有错误,所以我知道导入必须没问题。似乎与QGIS本身没有任何“链接”。我在做什么错了?