Отладка QGIS расширения в PyCharm: различия между версиями
(не показано 17 промежуточных версий этого же участника) | |||
Строка 3: | Строка 3: | ||
== Описание проблемы == | == Описание проблемы == | ||
При разработке расширений QGIS на | При разработке расширений QGIS на Python не редко встает проблема отладки кода. К сожалению, для отладки модуля в "родном окружении" необходимо запустить QGIS, который и загрузит разрабатываемое расширение в своем процессе. При этом режим интерактивной отладки из среды разработки(IDE) становится недоступным, так как код расширения запущен не в режиме отладки (pdb), а в стандартном процессе-интерпретаторе Python. | ||
Для того, что бы иметь возможность отлаживать части кода в IDE можно воспользоваться механизмом Remote Debug (удаленная отладка). В этом случае, код, выполняемый в другом процессе, может сам инициировать остановку исполнения и передать управление другому процессу, например нашей IDE. | Для того, что бы иметь возможность отлаживать части кода в IDE можно воспользоваться механизмом Remote Debug (удаленная отладка). В этом случае, код, выполняемый в другом процессе, может сам инициировать остановку исполнения и передать управление другому процессу, например нашей IDE. | ||
Этим способом можно воспользоваться в различных IDE. В заметке описывается вариант для PyCharm версии 3.4 или выше. | Этим способом можно воспользоваться в различных IDE. В заметке описывается вариант для [https://www.jetbrains.com/pycharm/ PyCharm] версии 3.4 или выше. | ||
Данная IDE имеет удобные функции автодополнения, проверки синтаксиса, проверки на соответствие кода требованиям pep8 и pylint и запуска юнит-тестов, что делает её удобной для разработки расширений для QGIS. | |||
== Предварительные настройки == | == Предварительные настройки == | ||
Строка 14: | Строка 16: | ||
Так же, для удобства отладки желательно установить QGIS расширение [http://plugins.qgis.org/plugins/plugin_reloader/ Plugin Reloader]. Этот модуль позволяет перезагружать разрабатываемое расширение, например в следствии изменения кода, без перезапуска самого QGIS. | Так же, для удобства отладки желательно установить QGIS расширение [http://plugins.qgis.org/plugins/plugin_reloader/ Plugin Reloader]. Этот модуль позволяет перезагружать разрабатываемое расширение, например в следствии изменения кода, без перезапуска самого QGIS. | ||
Для возможности использовать удаленную отладку необходимо установить пакет pydevd в тот PYTHONPATH, с которым запускается QGIS. В общем случае это директория site-package системного Python. В случае использования | Для возможности использовать удаленную отладку необходимо установить пакет pydevd в тот PYTHONPATH, с которым запускается QGIS. В общем случае это директория site-package системного Python. В случае использования OSGeo4W или нестандартной установки необходимо выбирать соответствующий интерпретатор\директорию установки. | ||
Пакет pydevd распространяется вместе с PyCharm. Обычно файл pycharm-debug.egg (pycharm-debug-py3k.egg если использвется Python 3) находится в корневой директории установки PyCharm. Установить пакет можно различными способами. Наиболее простой - с помощью easy_install или pip: | Пакет pydevd распространяется вместе с PyCharm. Обычно файл pycharm-debug.egg (pycharm-debug-py3k.egg если использвется Python 3) находится в корневой директории установки PyCharm. Установить пакет можно различными способами. Наиболее простой - с помощью easy_install или pip: | ||
< | '''Для Linux''' | ||
<syntaxhighlight lang="bash"> | |||
$ sudo easy_install ~/Soft/pycharm-3.4.1/pycharm-debug.egg | |||
</syntaxhighlight> | |||
'''Для Windows''' | |||
<syntaxhighlight lang="bash"> | |||
c:\Python27\Scripts\easy_install.exe c:\Soft\pycharm-3.4.1\pycharm-debug.egg | |||
</syntaxhighlight> | |||
Проверить, что пакет установился верно можно командой: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
python -c "import pydevd" | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Настройка проекта == | == Настройка проекта == | ||
Конфигурация запуска удаленной отладки несколько отличается от конфигурирования стандартной отладки. Если в случае стандартной отладки необходимо выбрать стартовый скрипт и указать дополнительные настройки, то в случае удаленной по факту необходимо настроить запуск сервера отладки, который будет ждать подключения удаленного кода. Для этого необходимо выполнить следующие действия: | |||
1) В главном меню PyCharm выбрать пункт Run -> Edit configuration. Тот же самый пункт можно выбрать из выпадающего списка на панели инструментов: | |||
[[Файл:Remote_debug_pycharm2.png]] [[Файл:Remote_debug_pycharm1.png]] | |||
2) В появившемся окне настройки конфигураций закуска нажать на "+" и выбрать пункт Python Remore Debug: | |||
[[Файл:Remote_debug_pycharm3.png|550px]] | |||
3) Заполнить поля Name и Port: | |||
[[Файл:Remote_debug_pycharm4.png|550px]] | |||
4) Сохранить настройки нажав кнопку OK или Apply | |||
Конфигурация отладки готова. | |||
== Выбор места установки точки останова == | == Выбор места установки точки останова == | ||
В отличие от стандартной отладки, при использовании удаленной в код необходимо добавить дополнительный вызов удаленного отладчика: | |||
<syntaxhighlight lang="python"> | |||
import pydevd | |||
pydevd.settrace('localhost', port=5566, stdoutToServer=True, stderrToServer=True, suspend=False) | |||
</syntaxhighlight> | |||
Вставлять данный код необходимо в том месте, где предполагается начинать саму отладку. Чаще всего это начало функции или обработчика некого события. | |||
'''Важно!''' | |||
При использовании PyCharm 3.X вставка этого вызова в функции __init__ или initGui класса расширения иногда могут приводить к зависаниям QGIS при старте или при перезагрузке модуля. С PyCharm 4.0 такого зависания не наблюдается. | |||
После вставки данного вызова можно как и при обычной отладке расставлять в коде точки останова. | |||
== Запуск отладки == | == Запуск отладки == | ||
Запуск отладки происходит в два этапа. | |||
1. Запуск сервера отладки в IDE. Для этого необходимо нажать комбинацию Shift-F9 или нажать кнопку Debug на панели инструментов. При этом в нижней панели отобразится окно отладки и станет активна вкладка Console, в которую будут выводится сообщения. | |||
При успешном запуске в консоли должны появится строки: | |||
<pre> | |||
Starting debug server at port 5566 | |||
Waiting for process connection... | |||
</pre> | |||
2. Запуск QGIS, либо перезагрузка разрабатываемого модуля с помощью Plugin Reloader, если QGIS уже был запущен. При этом, когда выполнение дойдет до указанной точки, в консоли отладки PyCharm появится строка: | |||
<pre> | |||
Connected to pydev debugger (build 139.487) | |||
</pre> | |||
и стать активной вкладка Debbuger: | |||
[[Файл:Remote debug pycharm5.png|550px]] | |||
Теперь можно работать с отладчиком в интерактивном режиме как при обычной отладке. | |||
== Ссылки по теме == | == Ссылки по теме == | ||
Строка 33: | Строка 97: | ||
[http://linfiniti.com/2012/09/remote-debugging-qgis-plugins-using-pycharm/ Remote debugging QGIS plugins using PyCharm] | [http://linfiniti.com/2012/09/remote-debugging-qgis-plugins-using-pycharm/ Remote debugging QGIS plugins using PyCharm] | ||
[https://www.jetbrains.com/pycharm/webhelp/remote-debugging.html PyCharm Onlin Help. Remote Debugging] |
Текущая версия от 15:02, 27 ноября 2014
В данной заметке описан один из способов отладки кода расширения 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. Тот же самый пункт можно выбрать из выпадающего списка на панели инструментов:
2) В появившемся окне настройки конфигураций закуска нажать на "+" и выбрать пункт Python Remore Debug:
3) Заполнить поля Name и Port:
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 debugging QGIS python plugins with PyDev