学习笔记(一):Windows和Ubuntu系统下的QGIS-python二次开发环境配置方法

2023-11-05

0 写在前面

  最近学习在做水文模型二次开发,项目要用到QGIS-python做GIS平台,中间踩了不少坑,目前的教程大多是依赖于QGIS自带的编辑器或者是C++开发环境的配置,基于python的QGIS独立二次开发环境配置方面资料较少或走不通。

  经过相关资料的阅读、各种方法的对比和大佬的指导,在Windows 10系统和Ubuntu 22.04系统中分别尝试开发环境的配置。

  现将Windows 10和Ubuntu 22.04系统下的QGIS-python开发环境配置过程总结归纳下来,以供交流。

1 Win10系统下QGIS-python的开发环境配置

1.1 方法一:使用QGIS软件中的bat文件直接配置环境

  这种方法简单直接,也是资料书籍中推荐的配置方法,主要步骤如下:

step1:QGIS的下载及安装

  在QGIS的官网 (https://www.qgis.org/en/site/forusers/download.html)中提供了两种下载方式,分别是直接下载安装包和使用OSGeo4W进行依赖文件的下载。这里直接下载安装包进行安装,详细过程如下:

  下载安装包,这里给出了一个最新版和一个LTR长期发行版,可以根据自己的需要进行选择:

winqgisdownload

  下载得到后缀为.msi的安装包,按照步骤选择安装目录进行安装:

winqgisinstall

step2:QGIS-python的环境配置

  安装完成后打开QGIS程序文件夹,在./QGIS xx.xx/bin/目录下有个python-qgis.bat批处理文件,这个文件临时配置了python调用qgis库所需要的环境。

winqgisbat

可以看到里面主要进行了以下几个路径的配置:

‘C:\Program Files\QGIS 3.28.2\apps\qgis\python’;
‘C:\Program Files\QGIS 3.28.2\bin’;
‘C:\Program Files\QGIS 3.28.2\bin\python39.zip’;
‘C:\Program Files\QGIS 3.28.2\apps\Python39\DLLs’;
‘C:\Program Files\QGIS 3.28.2\apps\Python39\lib’;
‘C:\Program Files\QGIS 3.28.2\apps\Python39’;
‘C:\Program Files\QGIS 3.28.2\apps\Python39\lib\site-packages’;
‘C:\Program Files\QGIS 3.28.2\apps\Python39\lib\site-packages\win32’;
‘C:\Program Files\QGIS 3.28.2\apps\Python39\lib\site-packages\win32\lib’;
‘C:\Program Files\QGIS 3.28.2\apps\Python39\lib\site-packages\Pythonwin’;

使用命令行检查qgis库是否可用:
1、打开命令行

WIN+R

2、切换到QGIS的bin目录下

cd C:\\Program Files\\QGIS 3.28.2\\bin

3、在命令行中直接输入python-qgis.bat,进入QGIS下的python配置器

python-qgis.bat

4、导入qgis库并运行,查看是否可用,没有报错,证明qgis库可用

C:\Program Files\QGIS 3.28.2\bin>python-qgis.bat
Python 3.9.5 (tags/v3.9.5:0a7dcbd, May  3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from qgis import *
>>> 

可以在PyCharm中直接将python-qgis.bat作为python解释器进行项目开发。至此第一种方法介绍完成。

1.2 方法二:使用conda进行QGIS-python环境的配置

  第一种配置方法虽然高效简单,但是只能借助QGIS自带的python解释器,并且在开发过程中进行其他的一些库的安装并不是很方便,还存在污染QGIS软件自身环境的风险。
  最关键是在做的项目中有个库不用conda装不上(这个问题在ubuntu中并没有遇到),也就有了方法二的探索,即使用conda进行虚拟环境的构建以及QGIS-python环境的配置,详细步骤如下:

step1:Miniconda的下载及安装

  目前用得比较多的有Anaconda和Miniconda,Miniconda仅包含了基础的conda和python依赖包,比较小,所以使用Miniconda。在Miniconda官网(https://docs.conda.io/en/latest/miniconda.html),选择合适的版本进行下载,这里选择Miniconda3 Windows 64-bit版,其中conda的版本是22.11.1 ,python的版本是3.10.8。

minicondadownload

根据安装提示逐步进行安装。

minicondainstall

  安装完成后打开命令行,输入conda,可能会弹出【‘conda’ 不是内部或外部命令,也不是可运行的程序或批处理文件】提示。

C:\Users\Administrator>conda
'conda' 不是内部或外部命令,也不是可运行的程序或批处理文件。

C:\Users\Administrator>

  这是由于环境变量没有设置的原因。打开Miniconda的文件安装目录,复制condabin的位置:C:\ProgramData\miniconda3\condabin,打开【此电脑】-【属性】-【高级系统设置】-【高级-环境变量】找到系统变量下变量名为PATH的变量,点【编辑】将复制的condabin的位置添加进去。

minicondasyspath

重新打开命令行再输入conda info,可以看到conda配置完成

C:\Users\Administrator>conda info

     active environment : None
       user config file : C:\Users\Administrator\.condarc
 populated config files : C:\Users\Administrator\.condarc
          conda version : 22.11.1
    conda-build version : not installed
         python version : 3.10.8.final.0
       virtual packages : __archspec=1=x86_64
                          __win=0=0
       base environment : C:\ProgramData\miniconda3  (writable)
      conda av data dir : C:\ProgramData\miniconda3\etc\conda
...

step2:创建虚拟环境

  打开命令行,输入conda create -n pyqgis_env,在conda的默认目录下创建名为pyqgis_env的虚拟环境,在不指定python版本的情况下,python解释器版本和Minconda下载时的对应版本一致。

C:\Users\Administrator>conda create -n pyqgis_env

接着在命令行中输入conda activate pyqgis_env进入pyqgis_env虚拟环境

C:\Users\Administrator>conda activate pyqgis_env

(pyqgis_env) C:\Users\Administrator>

step3:python的QGIS库安装

  这个库的安装过程经历了无数血和泪的探索,中间既试了不同电脑,还建了无数个虚拟机,熟练背诵全网环境配置教程以及官方指南,一度放弃win改用ubuntu。然而就在某个夜晚我进行了第10086+次尝试,竟然成功了!很开心,迸发出无比朴素的分享欲,也就有了这篇学习笔记。

  在虚拟环境下使用conda安装QGIS库,输入conda install -c https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/ qgis,这里使用中科大的镜像源进行安装,中间出现了两个提示"failed with initial frozen solve. Retrying with flexible solve."、“failed with repodata from current_repodata.json, will retry with next”,简单尝试了网上的一些方法,没有解决,但接着又配置正常了没有影响安装,所以没有深入了解出现这个问题的原因。

(pyqgis_env) C:\Users\Administrator>conda install -c https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/ qgis
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: done

安装完成后在虚拟环境命令行中输入python,并import qgis,顺利运行没有报错,证明虚拟环境中的qgis库安装成功了。

(pyqgis_env) C:\Users\Administrator>python
Python 3.11.0 | packaged by conda-forge | (main, Oct 25 2022, 06:12:32) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import qgis
>>>

2 Ubuntu 22.04系统下QGIS-python的开发环境配置

  在ubuntu系统中配置环境的过程就比较丝滑流畅了,没有任何阻碍。主要步骤如下:

step1:创建一个Ubuntu虚拟机

  这里虚拟机系统用的ubuntu最新的22.04版本,虚拟机创建过程不做赘述。

step2:下载Linux版本的QGIS

  在安装目录下打开终端,参照qgis的官网安装方法,依次输入以下命令安装QGIS软件:

sudo apt install gnupg software-properties-common
sudo mkdir -m755 -p /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/qgis-archive-keyring.gpg https://download.qgis.org/downloads/qgis-archive-keyring.gpg
sudo apt update
sudo apt install qgis qgis-plugin-grass

step3:python下的QGIS库安装

不同于win,ubuntu下的qgis库不需要进行其他环境的配置,在终端中直接输入python3,import qgis,便可以查看qgis库是否安装成功。

ubuntuqgis

3 使用PyCharm打开配置好的QGIS-python开发环境

  为了方便项目的管理,通常使用PyCharm编辑器。这里记录如何使用PyCharm打开配置好的QGIS-python开发环境,开发环境使用win10下方法二配置好的虚拟环境。

打开PyCharm项目,点击【文件】-【设置】

pycharm配置1

点击【项目】-【python解释器】

pycharm配置2

点击【⚙】-现有环境-【…】-选择虚拟环境路径下的python解释器

pycharm配置3

可以看到qgis库是之前安装的3.28.2版本

pycharm配置4
以上操作完成后创建python脚本,在编辑器中import qgis后运行可能会出现报错:

Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\pyqgisprj\main.py", line 6, in <module>
    import qgis
ModuleNotFoundError: No module named 'qgis'

这是由于qgis库安装的时候并没有像其他一些常规库安装到虚拟环境的lib文件夹下,而是安装到了另外一个文件夹…/Library/python/中,所以python解释器找不到。

qig包位置

为了解决这个报错,需要把qgis这个包文件复制到项目目录下,

qig包复制到项目
或者在import qgis之前将…/Library/python/地址加入到环境变量中

import sys
sys.path.append(r"C:\ProgramData\miniconda3\envs\pyqgis_env\Library\python")

import qgis

设置完成后,就可以成功导入qgis库了。
pycharm中qgis导入成功

4 结语

  以上就是各个系统不同的QGIS-python配置环境的过程,中间可能存在一些遗漏或理解不到位的地方。后续会继续记录学习过程。

学习交流联系方式:776551206@qq.com
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习笔记(一):Windows和Ubuntu系统下的QGIS-python二次开发环境配置方法 的相关文章

  • 有没有办法在 Altair 箱线图中格式化工具提示值

    是否可以格式化箱线图工具提示中的值 由此织女星文档 https vega github io vega lite docs boxplot html tooltip encoding channels 看起来是这样 但我不太清楚如何使用 A
  • 在python中合并3个dict()

    如果多个字典之间有公共字符串 是否有逻辑合并多个字典的方法 即使这些公共字符串在一个 dict 的值与另一个 dict 的键之间匹配 我在 SO 上看到了很多类似的问题 但似乎没有一个问题能解决我将 较低级别文件 中的多个键与较高键 值中的
  • Heroku 上的 Django 应用程序在一段时间后删除对象

    我编写了一个简单的 Django 问答论坛应用程序并将其部署在 Heroku 上 该网站的本地版本运行良好 但是 生产版本不会将问题 答案等存储超过几个小时 我决定坚持使用 Django 附带的 sqlite3 我预计该网站不会有太多流量
  • numpy:与索引数组有效求和

    假设我有 2 个矩阵 M 和 N 都有 gt 1 列 我还有一个索引矩阵 I 有 2 列 1 列代表 M 一列代表 N N 的索引是唯一的 但 M 的索引可能出现多次 我想要执行的操作是 for i j in w M i N j 除了 fo
  • SparkSession 初始化需要很长时间

    SparkSession 初始化需要很长时间才能成功 这是我的代码 import findspark findspark init import pyspark from pyspark sql import SparkSession sp
  • 在 Windows 上的 python2.5 上安装 Openpyxl

    我努力了easy install install openpyxl and python setup install 两者都失败了 我也尝试过easy install openpyxl并再次失败 我包括了我得到的输出 当我尝试时easy i
  • SQLAlchemy 在 MySQL 上使用什么列类型作为“文本”?

    我的总体用例是试图确定我是否可以编写一个与数据库无关的 至少支持 Postgres 和 MySQL 存储一些大数据作为原始文本 认为 500MB 作为粗略的理论上限 基于这个答案 https stackoverflow com a 2557
  • Python矩阵问题[重复]

    这个问题在这里已经有答案了 这是从这个线程继续的 Python矩阵 有什么解决方案吗 https stackoverflow com questions 5835583 python matrix any solution Input fr
  • Keras 中的条件批量归一化

    我正在尝试在 Keras 中实现条件批量标准化 我假设我必须创建一个自定义层 因此 我从正常化 https github com keras team keras blob master keras layers normalization
  • Pygame 旋转射击

    我和几个朋友一直在编写一种有趣的新射击机制 为了让它发挥作用 我们需要朝玩家面对的方向射击 Sprite 正在使用 Pygame Transform Rotate 进行旋转 我们怎样才能找到一个角度 然后朝那个方向发射子弹呢 这是我们的精灵
  • 从 Java 调用 Python 代码时出现问题(不使用 jython)

    我发现这是从 java 运行 使用 exec 方法 python 脚本的方法之一 我在 python 文件中有一个简单的打印语句 但是 我的程序在运行时什么也没做 它既不打印Python文件中编写的语句 也不抛出异常 程序什么都不做就终止了
  • 适用于 Windows 的键值数据库?

    除了 MongoDB 和 Memcached 之外 Windows 上还运行哪些键值存储 我见过的大多数似乎只能在 Linux 上运行 Hypertable Redis Lightcloud 相关链接 是否有经过商业验证的云存储 Key g
  • 如何使用 BeautifulSoup 只抓取可见的网页文本?

    基本上 我想用BeautifulSoup严格抓住可见文字在网页上 例如 这个网页 http www nytimes com 2009 12 21 us 21storm html是我的测试用例 我主要想获取正文 文章 甚至可能到处都有一些选项
  • 如何更改Python中的全局变量[重复]

    这个问题在这里已经有答案了 我正在尝试更改程序中的变量 我在程序开始时声明了一个全局变量 我想在程序中的不同函数中更改该变量 我可以通过再次声明函数内的变量来做到这一点 但我想知道是否有更好的方法来做到这一点 下面是一些测试代码来解释我的意
  • 无法从 celery 信号连接到 celery 任务?

    我正在尝试连接task2 from task success signal from celery signals import task success from celery import Celery app Celery app t
  • 为什么我只能在异步函数中使用await关键字?

    假设我有这样的代码 async def fetch text gt str return text async def show something something await fetch text print something 这很
  • 类型错误:对于仅使用浮点数的函数,返回数组必须是 ArrayType

    这个实在是难倒我了 我有一个计算单词权重的函数 我已经确认 a 和 b 局部变量都是 float 类型 def word weight term a term freq term print a type a b idf term prin
  • 在 kivy 中嵌套小部件

    我正在尝试在 kivy 中制作一个界面 我认为即使在完成教程之后 我仍然不了解自定义小部件以及如何对它们进行层次结构的一些基本知识 我认为我有更多的盒模型 html 思维方式 因此小部件嵌套在本机 GUI 中的方式对我来说仍然有点陌生 一些
  • 使用 Python PuLP 混合整数规划的时间限制

    我一直在使用PuLP http pythonhosted org PuLP 解决我感兴趣的特定混合整数线性规划 MIP 但是 随着问题规模的增长 PuLP 花费的时间太长 我希望能够运行求解器一段时间 并在需要很长时间的情况下提前终止它 并
  • Python tkinter:在组合框中使用“文本变量”似乎没用

    使用textvariable在 tkinter 中创建组合框时的属性似乎完全没用 有人可以解释一下目的是什么吗 我查看了 Tcl 文档 它说textvariable用于设置默认值 但看起来在 tkinter 中您只需使用 set方法来做到这

随机推荐

  • 服务器的文件共享,服务器文件共享设置

    服务器文件共享设置 内容精选 换一换 本文介绍了弹性文件服务SFS各特性版本的功能发布和对应的文档动态 新特性将在各个区域 Region 陆续发布 欢迎体验 云耀云服务器默认设置的时区 是您制作镜像时选择的时区 如需修改 请参见本节内容 将
  • client mac addr不能开机进不去系统_电脑的系统进不去界面重装系统的方法

    学会自己安装系统不求人全过程 纯手打 电脑系统界面进不去 但屏幕只要有字 哪怕左上角只有一横 就可以重做系统 电脑开机就怕一个字一个符号也没有 重做系统只是c盘文件丢失 其他盘文件还在 但硬盘有毛病 格式化硬盘 或者重新分区 所有的文件都没
  • 关于Cubemx(HAL库)中ADC和DMA同时启用存在的问题

    在使用Cubemx编程STM32时 若同时开启ADC和DMA 则软件自动生成的代码如下 可以看到 ADC初始化在DMA前面 这样一来 我们会发现从DMA提取的数据错误的 原因就在它们两个初始化函数的先后顺序是有讲究的 正确的顺序应该是DMA
  • 学习如何使用电脑客户端和ESP8266客户端来连接MQTT服务端以及订阅主题发送主题操作

    MQTT原理与应用 学习如何使用电脑客户端和ESP8266客户端来连接MQTT服务端 本文章学习借鉴于太极创客团队 以表感谢 官网 http www taichi maker com 文章目录 MQTT原理与应用 一 使用电脑客户端和ESP
  • Could not load dynamic library ‘libcusolver.so.11‘ No such file or directory; LD_LIBRARY_PATH:

    今日在安装tensorflow的时候遇见不能使用gpu的情况 经过一顿费劲网上搜集资料 发现根本就没有人说明白这个事情 特此做个笔记 把这个报错一次性说明白 一是为了给自己做个记录 二是也希望能帮助大家 首先 基本高版本的tensor fl
  • Vue修改默认字体

    1 在assets文件夹下创建文件夹 命名为font 2 在font文件夹中新建文件 font css font face font family pingFangSC Medium src url PingFangMedium 0 ttf
  • 时空复杂度(时间复杂度/空间复杂度)O(1)、O(n)、O(n^2)、O(log n)、O(n log n)是什么意思,借鉴 然后自己借鉴出来

    附上借鉴的地址 https blog csdn net lkp1603645756 article details 85013126 这些都是算法时空复杂度的表示 不仅仅用于表示时间复杂度 也用于表示空间复杂度 O后面的括号中有一个函数 指
  • Matlab学习10-图像处理之傅里叶变换

    文章目录 前言 一 离散傅里叶变换 二 二维离散傅里叶变换 三 傅里叶级数将周期函数转换为不同正弦波的叠加 前言 图像变换 一维离散变换 二维离散变换 傅里叶变换 离散余弦变换 Matlab学习10 图像处理之傅里叶变换 傅里叶变换 优点
  • 联合编译OpenCV+PCL+CUDA时需要注意的问题

    最近在写tsdf的程序 同时使用了OpenCV PCL和CUDA 在编译工程的时候发现了不少问题 在这里整理一下 1 cu和cpp文件 global host device 这样开头的cuda程序只能写在cu文件中 kernal lt lt
  • linux读写锁pthread_rwlock_t

    读写锁说明 读写锁实际是一种特殊的自旋锁 它把对共享资源的访问者划分成读者和写者 这种锁相对于自旋锁而言 能提高并发性 它允许同时有多个读者来访问共享资源 写者是排他性的 一个读写锁同时只能有一个写者或多个读者 但不能同时既有读者又有写者
  • 巴比特

    摘要 据钛媒体报道 当前市场对与内容相关的产品商业化的耐心不及以往 以至于 扎克伯格早早就为元宇宙设想好了商业化的落地场景 元宇宙方面 我们希望能够为用户提供更多业务帮助 比如通过聊天直接获取客户 直接对用户销售产品 提供客服帮助或再向用户
  • 国内NFT平台及玩法一览

    2021年被称为NFT的 元年 互联网巨头 各大企业 艺术家 明星纷纷入局NFT 屡创新高的NFT价格更是让其成为大众关注焦点 此推出NFT系列专题研究 盘点和总结NFT的发行市场 平台背景 投融资状况 市场热点 政策监管等相关内容 帮助读
  • c语言static关键字的理解

    static 一 概述 在c语言中static恰当的使用能让程序更加完美 细节上的严谨 代码会更好 也更利于程序的维护与扩展 而static使用灵活 且又有两种完全无关的用法 所以整理总结一下 二 static的两种用法 1 static修
  • Tomcat项目配置

    1 下载tomcat 版本 9 0 65 链接 https tomcat apache org download 90 cgi 2 解压tomcat tomcat直接解压就可以使用 解压后文件夹目录为 3 bin文件夹下 startup b
  • vue.js -- 全局组件&局部组件

    目录 vue组件 全局组件 组件定义 组件复用 组件的组件 局部组件 总结 vue组件 组件是 Vue js 最强大的功能之一 组件可以扩展 HTML 元素 封装可重用的代码 组件系统让我们可以用独立可复用的小组件来构建大型应用 几乎任意类
  • JAVA逻辑思维题(1)4个人过桥

    有4个女人要过一座桥 她们都站在桥的某一边 要让她们在17分钟内全部通过这座桥 这时是晚上 她们只有一个手电筒 最多只能让两个人同时过桥 不管是谁过桥 不管是一个人还是两个人 必须要带着手电筒 手电筒必须要传来传去 不能扔过去 每个女人过桥
  • vue ag-grid-vue 大数据动态加载服务器请求数据

    vue ag grid vue 渲染大数据表格 动态请求服务器数据设置子目录 目前只能是初始是一次性加载所有数据再分页渲染 还没有研究出滚动分页加载服务器 这个方法是一次加载所有数据在前端再做的分页渲染 点击目录文件展开能动态加载服务器的数
  • 计算机上应用锁,电脑怎么设置软件锁

    题主 针对这个问题有两个解决方案 一 设立两个账户 先创建一个用户 右键计算机 点管理 在弹出的对话框选择用户和组 选择用户 右键空白地方新建用户 设置密码等选项 新建完成关闭对话框 找到软件快捷方式或者软件图标 右键图标 选择属性 在跳出
  • 个人服务器环境搭建

    前言 文档创建时间 2022年12月1日14点26分 初衷 想搭建个人服务器 熟悉Linux的语言以及服务部署相关事情 主要方向可能是个人网站 公众号 小程序后台接口 之前有在免费的服务器上面搭建过 现在再次搭建顺便做个记录 前期准备 云服
  • 学习笔记(一):Windows和Ubuntu系统下的QGIS-python二次开发环境配置方法

    学习笔记 一 Windows和Ubuntu系统下的QGIS python二次开发环境配置方法 过程超级超级无敌详细 0 写在前面 1 Win10系统下QGIS python的开发环境配置 1 1 方法一 使用QGIS软件中的bat文件直接配