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.
Contents
Requirements
- 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.
Installing
Almost everything we need can be installed using the OSGeo4W installer available on the
QGIS website.
OSGeo4W
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 .cmd
script. The following is adapted from several sources, and trimmed down to the
minimum. Copy and paste it into a
file named pyqgis.cmd
and save it to a convenient location (like your HOME
directory).
@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-dev\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-dev\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 git
install.
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 pyqgis.cmd
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.
Installing pb_tool
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
project website.
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
also use pb_tool
to compile and deploy your plugin for testing.
IDE Example
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
as PyDev.
Within your IDE settings, point it to use the Python interpreter included with
OSGeo4W---typically at: %OSGEO4W_ROOT%\bin\python3.exe
. This will make it pick up
all the QGIS goodies needed for development, completion, and debugging. In my
case OSGEO4W_ROOT
is C:\OSGeo4W3
, so in the IDE, the path to the correct
Python interpreter would be: C:\OSGeo4W3\bin\python3.exe
.
Make sure you adjust the paths in your .cmd scripts to match your
system and software locations.
Workflow
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 [1]
- Start your pyqgis.cmd shell
- Use
pb_tool
to compile and deploy the plugin (pb_tool deploy
will 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
using pb_tool
to create a new config file:
- Start your pyqgis.cmd shell
- Change to the directory containing your plugin code
- Use
pb_tool create
to create a config file
- Edit
pb_tool.cfg
to adjust/add things create
may have missed
- Start at step 3 in Creating a New Plugin and press on
Troubleshooting
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.cmd
or your custom IDE cmd script
- Make sure your IDE is using the Python interpreter that comes with OSGeo4W
[1] Plugin Builder 3.x generates a pb_tool config file