Отладка QGIS расширения в PyCharm

Материал из GIS-Lab
Перейти к: навигация, поиск
Эта страница является черновиком статьи.


В данной заметке описан один из способов отладки кода расширения QGIS в среде разработки JetBrains PyCharm версии 3.4 и выше

Содержание

Описание проблемы

При разработке расширений QGIS на Python не редко встает проблема отладки кода. К сожалению, для отладки модуля в "родном окружении" необходимо запустить QGIS, который и загрузит разрабатываемое расширение в своем процессе. При этом режим интерактивной отладки из среды разработки(IDE) становится недоступным, так как код расширения запущен не в режиме отладки (pdb), а в стандартном процессе-интерпретаторе Python.

Для того, что бы иметь возможность отлаживать части кода в IDE можно воспользоваться механизмом Remote Debug (удаленная отладка). В этом случае, код, выполняемый в другом процессе, может сам инициировать остановку исполнения и передать управление другому процессу, например нашей IDE.

Этим способом можно воспользоваться в различных IDE. В заметке описывается вариант для PyCharm версии 3.4 или выше.

Данная IDE имеет удобные функции автодополнения, проверки синтаксиса, проверки на соответствие кода требованиям pep8 и pylint и запуска юнит-тестов, что делает её удобной для разработки расширений для QGIS.

Предварительные настройки

Предполагается, что PyCharm и QGIS уже установлены и настроены.

Так же, для удобства отладки желательно установить QGIS расширение Plugin Reloader. Этот модуль позволяет перезагружать разрабатываемое расширение, например в следствии изменения кода, без перезапуска самого QGIS.

Для возможности использовать удаленную отладку необходимо установить пакет pydevd в тот PYTHONPATH, с которым запускается QGIS. В общем случае это директория site-package системного Python. В случае использования OSGeo4W или нестандартной установки необходимо выбирать соответствующий интерпретатор\директорию установки.

Пакет pydevd распространяется вместе с PyCharm. Обычно файл pycharm-debug.egg (pycharm-debug-py3k.egg если использвется Python 3) находится в корневой директории установки PyCharm. Установить пакет можно различными способами. Наиболее простой - с помощью easy_install или pip:

Для Linux

$ sudo easy_install ~/Soft/pycharm-3.4.1/pycharm-debug.egg

Для Windows

c:\Python27\Scripts\easy_install.exe c:\Soft\pycharm-3.4.1\pycharm-debug.egg

Проверить, что пакет установился верно можно командой:

python -c "import pydevd"

Настройка проекта

Конфигурация запуска удаленной отладки несколько отличается от конфигурирования стандартной отладки. Если в случае стандартной отладки необходимо выбрать стартовый скрипт и указать дополнительные настройки, то в случае удаленной по факту необходимо настроить запуск сервера отладки, который будет ждать подключения удаленного кода. Для этого необходимо выполнить следующие действия:

1) В главном меню PyCharm выбрать пункт Run -> Edit configuration. Тот же самый пункт можно выбрать из выпадающего списка на панели инструментов:

Remote debug pycharm2.png Remote debug pycharm1.png

2) В появившемся окне настройки конфигураций закуска нажать на "+" и выбрать пункт Python Remore Debug:

Remote debug pycharm3.png

3) Заполнить поля Name и Port:

Remote debug pycharm4.png

4) Сохранить настройки нажав кнопку OK или Apply

Конфигурация отладки готова.

Выбор места установки точки останова

В отличие от стандартной отладки, при использовании удаленной в код необходимо добавить дополнительный вызов удаленного отладчика:

import pydevd
pydevd.settrace('localhost', port=5566, stdoutToServer=True, stderrToServer=True, suspend=False)

Вставлять данный код необходимо в том месте, где предполагается начинать саму отладку. Чаще всего это начало функции или обработчика некого события.

Важно!

При использовании PyCharm 3.X вставка этого вызова в функции __init__ или initGui класса расширения иногда могут приводить к зависаниям QGIS при старте или при перезагрузке модуля. С PyCharm 4.0 такого зависания не наблюдается.

После вставки данного вызова можно как и при обычной отладке расставлять в коде точки останова.

Запуск отладки

Запуск отладки происходит в два этапа.

1. Запуск сервера отладки в IDE. Для этого необходимо нажать комбинацию Shift-F9 или нажать кнопку Debug на панели инструментов. При этом в нижней панели отобразится окно отладки и станет активна вкладка Console, в которую будут выводится сообщения. При успешном запуске в консоли должны появится строки:

Starting debug server at port 5566
Waiting for process connection...


2. Запуск QGIS, либо перезагрузка разрабатываемого модуля с помощью Plugin Reloader, если QGIS уже был запущен. При этом, когда выполнение дойдет до указанной точки, в консоли отладки PyCharm появится строка:

Connected to pydev debugger (build 139.487)

и стать активной вкладка Debbuger:

Remote debug pycharm5.png

Теперь можно работать с отладчиком в интерактивном режиме как при обычной отладке.

Ссылки по теме

Remote debugging QGIS python plugins with PyDev

Remote debugging QGIS plugins using PyCharm

PyCharm Onlin Help. Remote Debugging

Персональные инструменты
Пространства имён

Варианты
Действия
Статьи
Спецпроекты
Инструменты