Getting started with Python and QGIS 3 can be a bit overwhelming. In this post we give you a quick start to get you up and running and maybe make your PyQGIS life a little easier.
There are likely many ways to setup a working PyQGIS development environment---this one works pretty well.
- Working on the Command Line
- IDE Example
- OSGeo4W Advanced Install of QGIS
- pip (for installing/managing Python packages)
- pb_tool (cross-platform tool for compiling/deploying/distributing QGIS plugin)
- A customized startup script to set the environment (pyqgis.cmd)
- IDE (optional)
- Emacs (just kidding)
- Vim (just kidding)
We'll start with the installs.
Almost everything we need can be installed using the OSGeo4W installer available on the QGIS website.
From the QGIS website, download the appropriate network installer (32 or 64 bit) for QGIS 3.
- Run the installer and choose the Advanced Install option
- Install from Internet
- Choose a directory for the install---I prefer a path without spaces such as C:\OSGeo4W
- Accept default for local package directory and Start menu name
- Tweak network connection option if needed on the Select Your Internet Connection screen
- Accept default download site location
- From the Select packages screen, select:
Desktop -> qgis: QGIS Desktop
When you click Next a bunch of additional packages will be suggested---just accept them and continue the install.
Once complete you will have a functioning QGIS install along with the other
parts we need. If you want to work with the nightly build of QGIS, choose
Desktop -> qgis-dev instead.
If you installed QGIS using the standalone installer, the easiest option is to remove it and install from OSGeo4W. You can run both the standalone and OSGeo4W versions on the same machine, but you need to be extra careful not to mix up the environment.
Setting the Environment
To continue with the setup, we need to set the environment by creating a
script. The following is adapted from several sources, and trimmed down to the
minimum. Copy and paste it into a
pyqgis.cmd and save it to a convenient location (like your HOME
@echo off SET OSGEO4W_ROOT=C:\OSGeo4W3 call "%OSGEO4W_ROOT%"\bin\o4w_env.bat call "%OSGEO4W_ROOT%"\apps\grass\grass-7.4.0\etc\env.bat @echo off path %PATH%;%OSGEO4W_ROOT%\apps\qgis\bin path %PATH%;%OSGEO4W_ROOT%\apps\grass\grass-7.4.0\lib path %PATH%;C:\OSGeo4W3\apps\Qt5\bin path %PATH%;C:\OSGeo4W3\apps\Python36\Scripts set PYTHONPATH=%PYTHONPATH%;%OSGEO4W_ROOT%\apps\qgis\python set PYTHONHOME=%OSGEO4W_ROOT%\apps\Python36 set PATH=C:\Program Files\Git\bin;%PATH% cmd.exe
You should customize the
set PATH statement to add any paths you want
available when working from the command line. I added paths to my
The last line starts a
cmd shell with the settings specified above it. We'll
see an example of starting an IDE in a bit.
You can test to make sure all is well by double-clicking on our
script, then starting Python and attempting to import one of the QGIS modules:
C:\Users\gsherman>python3 Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 07:18:10) [MSC v.1900 32 bit (In tel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import qgis.core >>> import PyQt5.QtCore
If you don't get any complaints on import, things are looking good.
Open your customized shell (double-click on pyqgis.cmd to start it) to install pb_tool:
python3 -m pip install pb_tool
Check to see if
pb_tool is installed correctly:
C:\Users\gsherman>pb_tool Usage: pb_tool [OPTIONS] COMMAND [ARGS]... Simple Python tool to compile and deploy a QGIS plugin. For help on a command use --help after the command: pb_tool deploy --help. pb_tool requires a configuration file (default: pb_tool.cfg) that declares the files and resources used in your plugin. Plugin Builder 2.6.0 creates a config file when you generate a new plugin template. See http://g-sherman.github.io/plugin_build_tool for for an example config file. You can also use the create command to generate a best-guess config file for an existing project, then tweak as needed. Bugs and enhancement requests, see: https://github.com/g-sherman/plugin_build_tool Options: --help Show this message and exit. Commands: clean Remove compiled resource and ui files clean_docs Remove the built HTML help files from the... compile Compile the resource and ui files config Create a config file based on source files in... create Create a new plugin in the current directory... dclean Remove the deployed plugin from the... deploy Deploy the plugin to QGIS plugin directory... doc Build HTML version of the help files using... help Open the pb_tools web page in your default... list List the contents of the configuration file translate Build translations using lrelease. update Check for update to pb_tool validate Check the pb_tool.cfg file for mandatory... version Return the version of pb_tool and exit zip Package the plugin into a zip file suitable...
If you get an error, make sure C:\OSGeo4W3\apps\Python36\Scripts is in your PATH.
More information on using
pb_tool is available on the
Working on the Command Line
Just double-click on your
pyqgis.cmd script from the Explorer or a desktop
shortcut to start a cmd shell. From here you can use Python interactively and
pb_tool to compile and deploy your plugin for testing.
By adding one line to our
pyqgis.cmd script, we can start our IDE with the proper settings
to recognize the QGIS libraries:
start "PyCharm aware of Quantum GIS" /B "C:\Program Files (x86)\JetBrains\PyCharm 3.4.1\bin\pycharm.exe" %*
We added the
start statement with the path to the
IDE (in this case PyCharm). If you save this to something like
pycharm.cmd, you can
double-click on it to start PyCharm. The same method works for other IDEs, such
Within your IDE settings, point it to use the Python interpreter included with
%OSGEO4W_ROOT%\bin\python3.exe. This will make it pick up
all the QGIS goodies needed for development, completion, and debugging. In my
C:\OSGeo4W3, so in the IDE, the path to the correct
Python interpreter would be:
Make sure you adjust the paths in your .cmd scripts to match your system and software locations.
Here is an example of a workflow you can use once you're setup for development.
Creating a New Plugin
- Use the Plugin Builder plugin to create a starting point 
- Start your pyqgis.cmd shell
pb_toolto compile and deploy the plugin (
pb_tool deploywill do it all in one pass)
- Activate it in QGIS and test it out
- Add code, deploy, test, repeat
Working with Existing Plugin Code
The steps are basically the same was creating a new plugin, except we start by
pb_tool to create a new config file:
- Start your pyqgis.cmd shell
- Change to the directory containing your plugin code
pb_tool createto create a config file
pb_tool.cfgto adjust/add things
createmay have missed
- Start at step 3 in Creating a New Plugin and press on
Assuming you have things properly installed, trouble usually stems from an incorrect environment.
- Make sure QGIS runs and the Python console is available and working
- Check all the paths in your
pygis.cmdor your custom IDE cmd script
- Make sure your IDE is using the Python interpreter that comes with OSGeo4W