Skip to main content

QGIS plugin development and packaging tools, which make managing runtime dependencies easy.

Project description

qgis-plugin-dev-tools

QGIS plugin development and packaging tools, which make managing runtime dependencies easy.

Prerequisites

Your plugin package must be available to import from the python environment this tool is run in. For example, running python -c "import your_plugin_package_name" should not fail. Additionally, any dependency libraries must also be available in the python environment, so a dependency to some_pypi_package needs something like pip install some_pypi_package for this tool to work.

Limitations

Bundling works by copying the code as-is and replacing the imports in all bundled files, so native library dependencies and other special cases might not work. To be safe, only depend on pure python libraries. Also verify the result zip works, since some import statements or sys.modules usage might not be supported.

Setup

Install this library with pip install qgis-plugin-dev-tools.

Create a pyproject.toml tool section:

[tool.qgis_plugin_dev_tools]
plugin_package_name = "your_plugin_package_name"

If the plugin runtime depends on external libraries, add the distribution names to runtime_requires list as abstract dependencies.

[tool.qgis_plugin_dev_tools]
plugin_package_name = "your_plugin_package_name"
runtime_requires = [
    "some_pypi_package"
]

Plugin packaging

Run qgis-plugin-dev-tools build (short qpdt b) to package the plugin and any runtime dependencies to a standard QGIS plugin zip file, that can be installed and published.

By default config is read from pyproject.toml, changelog notes from CHANGELOG.md, version from latest changelog item title, and package is created in a dist directory in the current working directory. Changelog contents and version number are inserted to the metadata.txt file, so the version and changelog sections do not need manual updates.

Plugin development mode

Run qgis-plugin-dev-tools start (short qpdt s) to launch QGIS with the plugin installed and ready for development.

By default config is read from pyproject.toml and runtime config from .env in the current working directory. Extra environment files can be passed using -e flag. .env must configure the executable path, and may configure debugger, profile name and any extra runtime variables necessary for the plugin.

QGIS_EXECUTABLE_PATH= # path to qgis-bin/qgis-bin-ltr or .exe equivalents, necessary
# DEBUGGER_LIBRARY= # debugpy/pydevd to start a debugger on init, library must be installed to the environment
# DEVELOPMENT_PROFILE_NAME= # name of the profile that qgis is launched with, otherwise uses default

# any other variables are added to the runtime QGIS environment
# SOMETHING=something

Development mode bootstraps the launched QGIS to have access to any packages available to the launching python environment, setups enviroment variables, configures a debugger, and installs and enables the developed plugin package.

Additionally editable installs for the plugin dependencies are supported. For example with a dependency to some_pypi_package, use pip install -e /path/to/some_pypi_package to provide some_pypi_package in editable mode from a local directory, and use Plugin Reloader to refresh new code when its changed on disk. This will also reload the declared dependencies.

Developing multiple plugins

Development mode also enables using and developing multiple plugins easily if certain requirements are satisfied for all extra plugins:

  • Extra plugin must be installable python packages
  • Extra plugin must have entry point in group "qgis_plugin_dev_tools"
  • Extra plugin needs to be installed in the same python environment where this tool is run in

Extra plugins are loaded on launch and reloaded together with the main plugin if Plugin Reloader is used.

Development of qgis-plugin-dev-tools

See development readme.

License & copyright

Licensed under GNU GPL v3.0.

Copyright (C) 2022 National Land Survey of Finland.

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.2.0 - 2022-06-13

  • Feat: enable extra plugins in development mode

0.1.2 - 2022-05-30

  • Fix: use UTF-8 encoding for file reads/writes

0.1.1 - 2022-05-16

  • Fix: rewrite runtime requirement imports correctly

0.1.0 - 2022-05-12

  • Initial release: start and build commands with minimal configuration options.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qgis-plugin-dev-tools-0.2.0.tar.gz (30.1 kB view details)

Uploaded Source

Built Distribution

qgis_plugin_dev_tools-0.2.0-py3-none-any.whl (39.3 kB view details)

Uploaded Python 3

File details

Details for the file qgis-plugin-dev-tools-0.2.0.tar.gz.

File metadata

  • Download URL: qgis-plugin-dev-tools-0.2.0.tar.gz
  • Upload date:
  • Size: 30.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.13

File hashes

Hashes for qgis-plugin-dev-tools-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3822e8e440042f7d6ffa72e765317dc1719b92f0aecc5e5c9734600a2f2c9408
MD5 799847ae30cfd9def6f69e1afced2111
BLAKE2b-256 40b0af2bd7a78acca36c152b5e74000d4c74ba098eab197096be15f53b3a1183

See more details on using hashes here.

Provenance

File details

Details for the file qgis_plugin_dev_tools-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for qgis_plugin_dev_tools-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8f228aa1eab334ce9d1dc63f132ebfba1d63f864baa712603a7de178912ec2ad
MD5 3021ffa312b6f1bf5d54233d0a248ab0
BLAKE2b-256 b7310c34e596cb3349cf4a5c823873bf5d34b5806d1f713f315a7dcabfb225c6

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page