QGIS+PyUIC+PyQt5 ImportError: DLL load failed 解决方法

【软件环境】
● QGIS下载地址:
https://qgis.org/downloads/
https://qgis.org/downloads/QGIS-OSGeo4W-3.16.5-1-Setup-x86_64.exe

● PyCharm下载地址:
https://www.jetbrains.com/pycharm/download/other.html
https://download.jetbrains.com/python/pycharm-community-2020.1.1.exe
https://download.jetbrains.com/python/pycharm-professional-2020.1.1.exe

● jetbrains-agent.jar文件下载地址:
https://wwa.lanzous.com/ixCw8eq3ofc

● Python下载地址:
https://www.python.org/
https://www.python.org/downloads/
https://www.python.org/ftp/python/3.7.0/python-3.7.0-amd64.exe

【问题描述】
某日,在QGIS二次开发的PyCharm环境中将新建的UI文件通过已配置的PyUIC转换为.py代码时报错“from PyQt5 import QtCore ...,ImportError: DLL load failed ...”。



【解决办法】
按如下设置配置Project Interpreter、QT Designer、PyUIC及PyRCC。
核心是PyUIC的Program依据本机QGIS安装路径应设为 D:\Program Files\QGIS 3.16\bin\python-qgis-ltr.bat,而不是网上常见的 D:\Program Files\QGIS 3.16\apps\Python37\Scripts\pyuic5.bat,且PyUIC的 Arguments应为 -m PyQt5.uic.pyuic  $FileName$ -o $FileNameWithoutExtension$.py,而不是网上常见的 $FileName$ -o $FileNameWithoutExtension$.py
PyRCC的Program依据本机QGIS安装路径应设为 D:\Program Files\QGIS 3.16\bin\python-qgis-ltr.bat,而不是网上常见的 D:\Program Files\QGIS 3.16\apps\Python37\Scripts\pyrcc5.bat,且PyRCC的Arguments应为-m PyQt5.pyrcc_main $FileName$ -o $FileNameWithoutExtension$_rc.py,而不是网上常见的$FileName$ -o $FileNameWithoutExtension$_rc.py
● 重难点详述:PyCharm环境下Project Interpreter、QT Designer、PyUIC及PyRCC的配置
   - Project Interpreter配置(PyCharm菜单File -> Settings... -> Project:... -> Python Interpreter)
             D:\Program Files\QGIS 3.16\bin\python-qgis-ltr.bat
   - QT Designer配置(PyCharm菜单File -> Settings... -> Tools -> External Tools)
             Program:D:\Program Files\QGIS 3.16\apps\qt5\bin\designer.exe
             Arguments:
             Working directory:$ProjectFileDir$
   - PyUIC配置(PyCharm菜单File -> Settings... -> Tools -> External Tools)
             Program:D:\Program Files\QGIS 3.16\bin\python-qgis-ltr.bat
             Arguments:-m PyQt5.uic.pyuic  $FileName$ -o $FileNameWithoutExtension$.py
             Working directory:$ProjectFileDir$
   - PyRCC配置(PyCharm菜单File -> Settings... -> Tools -> External Tools)
             Program:D:\Program Files\QGIS 3.16\bin\python-qgis-ltr.bat
             
Arguments:-m PyQt5.pyrcc_main $FileName$ -o $FileNameWithoutExtension$_rc.py
             
Working directory:$ProjectFileDir$
● 运行代码出现错误提示:
   - no Qt platform plugin could be initialized ...
   - Available platform plugins are:direct2d,minimal,offscreen,windows,webgl ...
   解决方法:Delete the folder python 3.7 in the directory C:\Users\user\AppData\Roaming\Python
● 检验开发环境是否配置成功
   在PyCharm软件界面最下方的Terminal中输入如下命令。若没有错误出现,则QGIS二次开发的PyCharm环境配置成功。
   import qgis.core
   import qgis.gui


【网上流传的降级PyQt5版本为5.9方法的不足】
网上流传的将QGIS-OSGeo4W-3.16.5-1-Setup-x86_64.exe中自带的PyQt5版本降级为5.9后,可以成功解决利用PyUIC转换为.py代码时报错“from PyQt5 import QtCore ...,ImportError: DLL load failed ...”的问题。

注意:按本文所述,在PyCharm下配置的PyQGIS二次开发环境,能成功运行PyQGIS的代码。但是,存在一个bug,即PyCharm下的Python Console不可用不完美。通过分析,发现只要将Project Interpreter配置为本文安装的QGIS自带的Python解释器 D:\Program Files\QGIS 3.16\bin\python-qgis-ltr.bat ,就会导致PyCharm下的Python Console不可用。原因虽然明确了,但是我一直没有找到在选择QGIS自带的Python解释器的前提下,让PyCharm下的Python Console可用的办法。若有找到解决办法的朋友,请不吝赐教。因此,对于想在PyCharm下使用Python Console的朋友,可以再从Python官网下载安装一个Python 3.7.0作为PyCharm下的另一个Python解释器,即让它与QGIS自带的Python共存。之后,若有在PyCharm下使用Python Console的需要,可在PyCharm中切换到新安装的Python 3.7.0作为Python解释器。之所以安装Python 3.7.0,还是考虑兼容性,因为本文提供的QGIS 3.16.5-1所集成的Python版本为3.7.0,这从QGIS的安装目录D:\Program Files\QGIS 3.16\apps\Python37\Scripts\...中的子目录就可以看出来。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
为了便于学习,现把网上流传的将QGIS-OSGeo4W-3.16.5-1-Setup-x86_64.exe中自带的PyQt5版本降级为5.9的设置方法也陈述如下:


● 输入pyqt5检索并选中,然后在右方勾选“Specify version”后选中5.9版本,之后单击下方按钮“Install Package”安装



● 显示成功安装版本为5.9的PyQt5,替代了原来的5.11.3版本的PyQt5。



 

 

【参考文献】
https://jingyan.baidu.com/article/3a2f7c2e26871a26afd6112d.html
https://blog.csdn.net/hnjzsyjyj/article/details/115736561
https://blog.csdn.net/liulunyang/article/details/88414229
https://blog.csdn.net/hnjzsyjyj/article/details/115418746

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值