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

Материал из GIS-Lab
(Различия между версиями)
Перейти к: навигация, поиск
(Ссылки по теме)
 
(не показаны 24 промежуточные версии 1 участника)
Строка 3: Строка 3:
  
 
== Описание проблемы ==
 
== Описание проблемы ==
При разработке расширений QGIS на python не редко встает проблема отладки кода. К сожалению, для отладки модуля в "родном окружении" необходимо запустить QGIS, который и загрузит разрабатываемое расширение в своем процессе. При этом режим интерактивной отладки из среды разработки(IDE) становится недоступным, так как код расширения запущен не в режиме отладки (pdb), а в стандартном процессе-интерпретаторе Python.
+
При разработке расширений QGIS на Python не редко встает проблема отладки кода. К сожалению, для отладки модуля в "родном окружении" необходимо запустить QGIS, который и загрузит разрабатываемое расширение в своем процессе. При этом режим интерактивной отладки из среды разработки(IDE) становится недоступным, так как код расширения запущен не в режиме отладки (pdb), а в стандартном процессе-интерпретаторе Python.
Для того, что бы иметь возможность отлаживать части кода в IDE можно воспользоваться механизмом Remote Debug (удаленная отладка). В этом случае, код, выполняемый в другом процессе, может сам инициировать остановку исполнения и  
+
 
 +
Для того, что бы иметь возможность отлаживать части кода в IDE можно воспользоваться механизмом Remote Debug (удаленная отладка). В этом случае, код, выполняемый в другом процессе, может сам инициировать остановку исполнения и передать управление другому процессу, например нашей IDE.
 +
 
 +
Этим способом можно воспользоваться в различных IDE. В заметке описывается вариант для [https://www.jetbrains.com/pycharm/ PyCharm] версии 3.4 или выше.
 +
 
 +
Данная IDE имеет удобные функции автодополнения, проверки синтаксиса, проверки на соответствие кода требованиям pep8 и pylint и запуска юнит-тестов, что делает её удобной для разработки расширений для QGIS.
  
 
== Предварительные настройки ==
 
== Предварительные настройки ==
 +
Предполагается, что PyCharm и QGIS уже установлены и настроены.
 +
 +
Так же, для удобства отладки желательно установить QGIS расширение [http://plugins.qgis.org/plugins/plugin_reloader/ 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'''
 +
<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">
 +
python -c "import pydevd"
 +
</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]]
 +
 +
Теперь можно работать с отладчиком в интерактивном режиме как при обычной отладке.
 +
 +
== Ссылки по теме ==
 +
[http://linfiniti.com/2011/12/remote-debugging-qgis-python-plugins-with-pydev/ Remote debugging QGIS python plugins with PyDev]
 +
 +
[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]

Текущая версия на 14: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. Тот же самый пункт можно выбрать из выпадающего списка на панели инструментов:

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

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

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