Pycharm环境配置
QGIS的脚本开发实际上有两种,一种是直接在QGIS自己的Python Console中写代码并运行,这样的最大好处是没有任何的环境配置要求,而且你可以用iface这个万能API。但是一方面用惯了IDE看着丑陋的编辑器很别扭,另一方面,也就是另一种脚本开发,QGIS脚本实际上是脱离QGIS软件本身的,我们只是需要调用QGIS的一些包来完成目标操作,如果你去Google查,这种叫做standalone script
两种方式使Pycharm可以识别QGIS包
1、设置解释器方式
首先请确保Pycharm版本为2020,或2018。Pycharm 2019版本有关于组件识别不正确的问题,请不要使用。
新建一个项目,选择Python解释器为:D:\QGIS\bin\python-qgis.bat
,这个批处理会自动设置环境变量,然后启动python解释器。
这样设置之后,PyCharm可以读取到qgis相关的包,包括qgis.core、qgis.gui等等。如果不放心,还可以继续下面关于环境变量的配置。
注:此时的PyCharm无法使用processing工具包,如果需要使用请在代码中加入:
import sys
sys.path.append('D:\\Software\\QGIS\\apps\\qgis\\python\\plugins')
# 一定要指向processing的所在目录
新建PYTHONPATH,将下列路径加入其中:
经过我的确认,上图中前两条环境变量直接决定解释器能否“意识到”(aware of)Qgis包。如果你使用的是VScode这样的编辑器,由于其使用的代码提示插件,比如pylint,属于静态解析,而qgis中很多对象运行过程中才会创建,所以VScode中只进行上述配置后,运行下列语句还是会报错:
from qgis.core import QgsProject
他会提示你No Module named QgsProject in qgis.core
,实测在PyCharm中可以跑的程序,VScode只要设置成以python-qgis.bat
作为解释器就可以正常运行。当然标一片红看着很难受,作为解决方案,我们可以在VScode的settings.json
中加入下列语句:
"python.linting.pylintArgs":["--generate-members"]
2、批处理文件启动方式
方式二是我在使用Pycharm 2019时找到的解决方案,解决了No module named qgis.core的问题,但是有包中内容无法解析的问题。升级2020之后用方法一解决了,以下内容不保证可靠。
想要在Pycharm中开发QGIS的插件,核心问题在于保证Pycharm中的编译环境和QGIS中的python控制台一致。为了做到这个目标,我们写一个批处理文件,来确保开启Pycharm时环境变量和QGIS中一致:
创建一个start_up.cmd文件,编辑,加入下列命令:
@echo off
SET OSGEO4W_ROOT=D:\Software\QGIS
call "%OSGEO4W_ROOT%"\bin\o4w_env.bat
call "%OSGEO4W_ROOT%"\apps\grass\grass78\etc\env.bat
@echo off
path %PATH%;%OSGEO4W_ROOT%\apps\qgis\bin
path %PATH%;%OSGEO4W_ROOT%\apps\grass\grass78\lib
path %PATH%;%OSGEO4W_ROOT%\apps\Qt5\bin
path %PATH%;%OSGEO4W_ROOT%\apps\Python37\Scripts
path %PATH%;%OSGEO4W_ROOT%\bin
path %PATH%;%OSGEO4W_ROOT%\apps\Python37\DLLs
path %PATH%;%OSGEO4W_ROOT%\apps\Python37\lib
path %PATH%;%OSGEO4W_ROOT%\apps\Python37\lib\site-packages
path %PATH%;%OSGEO4W_ROOT%\apps\qgis\bin
path %PATH%;%OSGEO4W_ROOT%\apps\qgis\python
path %PATH%;%OSGEO4W_ROOT%\apps\qgis\python\qgis
path %PATH%;%OSGEO4W_ROOT%\apps\Qt5
path %PATH%;%OSGEO4W_ROOT%\apps\qgis\qtplugins
path %PATH%;%OSGEO4W_ROOT%\apps\qgis\python\PyQt5
set PYTHONPATH=%PYTHONPATH%;%OSGEO4W_ROOT%\apps\qgis\python
set PYTHONHOME=%OSGEO4W_ROOT%\apps\Python37
set PATH=C:\Program Files;%PATH%
start "PyCharm aware of Quantum GIS" /B "D:\Software\PyCharm 2019.3.3\bin\pycharm64.exe"
注意修改$OSGEO4W_ROOT$
,以及Pycharm启动文件所在的路径即可。
双击执行会自动打开Pycharm,确保Pycharm的Interpreter是"*\QGIS\bin\python3.exe",此时输入
from qgis.core import *
print("test")
执行成功则环境搭建成功,之后启动Pycharm编写QGIS插件都需要执行批处理文件。