I'm referring to this post:

Why does QGIS 3.2 "native:extractvertices" algorithm not work properly in standalone script?

as part on creating startup file py3-env.bat for opening PyCharm with PyQGIS works:



@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%\apps\qgis\bin;%PATH%

set VSI_CACHE_SIZE=1000000
set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\qgis\qtplugins;%OSGEO4W_ROOT%\apps\qt5\plugins

SET PYCHARM="C:\Program Files\JetBrains\PyCharm Community Edition with Anaconda plugin 2020.1\bin\pycharm64.exe"

set PYTHONPATH=%OSGEO4W_ROOT%\apps\qgis\python
set PYTHONHOME=%OSGEO4W_ROOT%\apps\Python37
set PYTHONPATH=%OSGEO4W_ROOT%\apps\Python37\lib\site-packages;%PYTHONPATH%

set QT_QPA_PLATFORM_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\Qt5\plugins\platforms

cd /d %~dp0
::python3 scratch.py
start "PyCharm aware of QGIS" /B %PYCHARM% %*

I have:

QGIS 3.12.1 installed in: C:\OSGeo4W64

PyCharm 2020.1 installed in: C:\Program Files\JetBrains\PyCharm Community Edition with Anaconda plugin 2020.1\

After loading PyCharm the interpreter looks like this:

enter image description here

Now I just would like to run a simple test script like:

import sys

from qgis.core import (
from qgis.analysis import QgsNativeAlgorithms

QgsApplication.setPrefixPath(r'C:\OSGeo4W64\apps\qgis', True)
qgs = QgsApplication([], False)


import processing
from processing.core.Processing import Processing

layer = QgsVectorLayer(r"D:\test_pygis\lines.shp", 'my layer', 'ogr')
output = r"D:\test_pygis\verticles.shp"
params = {
    'INPUT': layer,
    'OUTPUT': output,
feedback = QgsProcessingFeedback()
res = processing.run("native:extractvertices", params, feedback=feedback)

First the processing module is not found:

enter image description here

If I try to run the code the second well know error appears in the Python console:

qt.qpa.plugin: Could not find the Qt platform plugin "windows" in "C:\OSGEO4~1\apps\Qt5\plugins\platforms"
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

2 Answers 2


I would like to share the solution I found to integrate PyCharm and PyQGIS in an effective way to run standalone scripts:


  • Windows 10
  • QGIS 3.10.4 installed in c:\Program Files\QGIS 3.10
  • PyCharm 2020.1.1 installed in c:\Program Files\JetBrains\PyCharm Community Edition 2020.1.1\bin\pycharm64.exe

I can start PyCharm from a batch file (e.g., pycharm_qgis.bat) that looks like the following (note that the QT_PLUGIN_PATH is slightly different than in your case):

@echo off 
set path=%OSGEO4W_ROOT%\bin;%WINDIR%\system32;%WINDIR%;%WINDIR%\system32\WBem

call o4w_env.bat 
call qt5_env.bat
call py3_env.bat

@echo off
path %OSGEO4W_ROOT%\apps\qgis-ltr\bin;%PATH%
set QGIS_PREFIX_PATH=%OSGEO4W_ROOT:\=/%/apps/qgis-ltr
set VSI_CACHE_SIZE=1000000
set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\qgis-ltr\qtplugins;%QT_PLUGIN_PATH%
set PYTHONPATH=%OSGEO4W_ROOT%\apps\qgis-ltr\python;%PYTHONPATH%

set PYCHARM="c:\Program Files\JetBrains\PyCharm Community Edition 2020.1.1\bin\pycharm64.exe"
@echo on
start "PyCharm with QGIS knowledge!" /B %PYCHARM% %*

From the code above, the o4w_env.bat, qt5_env.bat, py3_env.bat are the same batch files available in the QGIS binary folder (i.e., in the case of this example %OSGEO4W_ROOT%\apps\qgis-ltr\bin) without any modification. By executing pycharm_qgis.bat PyCharm starts and the Python interpreter can be set to %OSGEO4W_ROOT%\apps\Python37\python.exe in order to work with PyQGIS library.

Then, for PyCharm to recognize and use the processing module, one needs to manually add to the interpreter path the folder %OSGEO4W_ROOT%\apps\qgis-ltr\python\plugins, as shown in the next picture:

Manually add the processing module folder to Python interpreter path

After that, PyCharm can interact with the processing module:

PyCharm recognies the processing module

Finally, the following code excerpt replicates your example and uses the native:extractvertices algorithm:

import os
import sys

from qgis.analysis import QgsNativeAlgorithms
from qgis.core import QgsApplication, QgsVectorLayer, QgsProcessingException, QgsProcessingFeedback

if __name__ == "__main__":
    QgsApplication.setPrefixPath(r"c:\Program Files\QGIS 3.10\apps\qgis-ltr", True)
    qgs = QgsApplication([], False)
    sys.path.append(os.path.join(QgsApplication.prefixPath(), "python", "plugins"))

    import processing
    from processing.core.Processing import Processing

    s_lyr_gpk = os.path.join("Shp", "BOUNDARIES3D.shp")
    s_lyr_name = "Boundaries"
    lyr = QgsVectorLayer(s_lyr_gpk, s_lyr_name, 'ogr')
    if not lyr.isValid():
        print("Layer {} is not valid".format(s_lyr_name))

    s_alg = 'native:extractvertices'
    out = os.path.join("d:\Data\Output", "extracted_vertices_script.gpkg")

    di_param = {
         "INPUT": lyr,
         "OUTPUT": out
    feedback = QgsProcessingFeedback()
        di_out = processing.run(s_alg, di_param, feedback=feedback)
    except QgsProcessingException as e:

    print("Vertices extracted to file {}.".format(di_out["OUTPUT"]))

The above script can be executed directly from PyCharm to get the output geopackage written. No error related to missing QT platform plugin is raised (see image below):

Successful script execution from PyCharm

  • Thank you, give me some time to test!
    – cincin21
    May 28, 2020 at 9:11
  • Hi Cincin, let me know if any additional code snippet or explanation is needed. Cheers
    – fastest
    May 28, 2020 at 14:06
  • I believe it would be beneficial to paste whole code with import that others could copy-paste the solution
    – cincin21
    May 28, 2020 at 14:08
  • Hi Cincin, I did specify the content of the other bat files included in the file used to start PyCharm. Moreover, I added the import statement to the Python code example and enclosed it in a main function so that it can be executed as a standalone script. Cheers.
    – fastest
    May 28, 2020 at 14:38
  • Great stuff! I would only add one path to Interpreter paths: C:\Program Files\QGIS 3.10\apps\qgis-ltr\python , I've seen it in other solutions and after adding this one, everything started to work. Thank you very much!
    – cincin21
    May 28, 2020 at 20:27

The Most simply solution without the need to set an own bat-script I have found in the comments of this video: https://www.youtube.com/watch?v=Qm0PCw9v5lI

Just add a new Python Interpreter within PyCharm and select the file python-qgis-ltr.bat which you can find within the bin folder of your QGIS installation directory. All the variables in relation to this QGIS installation are set there already.

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.