1. 为什么选择Anaconda虚拟环境进行QGIS二次开发
搞GIS开发的朋友应该都遇到过这样的场景:电脑上同时跑着多个项目,有的需要QGIS 3.10,有的需要QGIS 3.22,还有的要用最新版的插件。直接安装多个QGIS版本?系统环境绝对乱成一锅粥。这时候Anaconda虚拟环境就是救命稻草了。
我去年接手一个老项目就踩过大坑,系统环境装的QGIS 3.18,结果项目需要用的插件只支持3.14版本。折腾了两天都没搞定依赖冲突,最后用conda新建了个虚拟环境,10分钟就解决了问题。虚拟环境最大的优势就是环境隔离,每个项目都有自己的Python解释器和依赖库,互不干扰。
相比virtualenv等工具,Anaconda在GIS开发中有三个不可替代的优势:
- 预编译的二进制包:conda-forge渠道的QGIS安装包都是预编译好的,不用自己折腾GDAL这些地理库的编译
- 跨平台一致性:同样的conda命令在Windows、Mac和Linux下都能用
- 依赖自动解析:安装QGIS时会自动处理PROJ、GDAL等复杂依赖关系
注意:建议使用Python 3.7.x版本,这是目前QGIS最稳定的兼容版本。我测试过3.8和3.9,某些插件会出现奇怪的兼容性问题。
2. 从零搭建QGIS开发环境
2.1 安装Anaconda并配置国内镜像
首先去 Anaconda官网 下载最新版,安装时记得勾选"Add to PATH"选项。安装完成后打开Anaconda Prompt,执行以下命令配置清华镜像源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ conda config --set show_channel_urls yes2.2 创建专用虚拟环境
推荐为每个QGIS项目创建独立环境,这里以qgis_dev为例:
conda create -n qgis_dev python=3.7.6 conda activate qgis_dev2.3 安装QGIS核心组件
通过conda-forge渠道安装QGIS全家桶:
conda install -c conda-forge qgis qgis-deps安装完成后验证是否成功:
qgis --version如果能看到版本号输出,说明GUI组件安装正确。这时候虽然能打开QGIS界面,但Python环境中还无法import qgis,需要继续配置。
3. 解决Python环境导入问题
3.1 获取QGIS Python路径
启动QGIS GUI,在插件菜单中打开Python控制台,执行:
import sys print(sys.path)你会看到一个包含多个路径的列表,类似这样:
[ 'C:/Program Files/QGIS 3.22/bin/python', 'C:/Users/username/AppData/Roaming/QGIS/QGIS3/profiles/default/python', ... ]3.2 将路径添加到虚拟环境
在Anaconda Prompt中执行(替换为你的实际路径):
conda develop "C:/Program Files/QGIS 3.22/bin/python" conda develop "C:/Users/username/AppData/Roaming/QGIS/QGIS3/profiles/default/python"现在可以在Python中测试导入:
from qgis.core import * print(Qgis.QGIS_VERSION)如果输出版本号,恭喜你,最难的坎已经迈过去了!
4. 配置PyCharm实现智能补全
4.1 项目解释器设置
- 在PyCharm中新建项目,选择Existing interpreter
- 定位到Anaconda虚拟环境下的Python.exe,通常路径为:
C:\Users\用户名\anaconda3\envs\qgis_dev\python.exe
4.2 解决代码补全失效问题
QGIS的Python包有些特殊,需要手动复制才能触发PyCharm的代码分析:
- 找到Anaconda安装目录下的qgis包:
anaconda3\pkgs\qgis-3.xx\Library\python\qgis - 复制到虚拟环境的site-packages目录:
anaconda3\envs\qgis_dev\Lib\site-packages\qgis - 在PyCharm中右键该目录 → Mark Directory as → Sources Root
4.3 调试配置技巧
在Run/Debug Configurations中添加Python配置,需要设置以下环境变量:
PYTHONPATH=C:/Program Files/QGIS 3.22/bin PATH=C:/Program Files/QGIS 3.22/bin;%PATH%5. 处理GIS特有的环境问题
5.1 解决GDAL数据路径问题
在代码开头添加以下配置(路径需替换为你的实际位置):
import os os.environ['PROJ_LIB'] = r'C:\Users\username\anaconda3\envs\qgis_dev\Library\share\proj' os.environ['GDAL_DATA'] = r'C:\Users\username\anaconda3\envs\qgis_dev\Library\share\gdal'5.2 常见错误排查
ImportError: DLL load failed: 检查环境变量PATH是否包含QGIS的bin目录
Proj相关错误: 更新proj包版本:
conda update -c conda-forge proj图形界面卡死: 在代码中添加Qt事件循环处理:
from qgis.PyQt.QtCore import QCoreApplication app = QCoreApplication.instance() if app is None: import sys from qgis.PyQt.QtWidgets import QApplication app = QApplication(sys.argv)
6. 离线环境部署方案
对于内网开发环境,可以这样打包:
- 在联网机器上完成上述所有步骤
- 使用conda-pack打包环境:
conda pack -n qgis_dev -o qgis_dev.tar.gz - 将压缩包复制到离线机器,解压到anaconda3/envs/目录
- 在PyCharm中指定解压后的python.exe路径
我去年给某地质单位部署时就用的这个方法,省去了他们配置环境的痛苦过程。记得打包前先测试所有功能,避免漏掉某些动态链接库。