Настройка IDE для розробки плаґінів

Хоча кожен програміст має улюблену IDE або текстовий редактор, ось деякі рекомендації з настройки популярних IDE для розробки плаґінів QGIS на Python.

Про настройку IDE у Windows

В Linux для розробки плаґінів додаткових настройок не потрібно. Але якщо ви працюєте в Windows, то необхідно переконатися що QGIS та інтерпретатор використовують однакові змінні оточення та бібліотеки. Найпростіший та найшвидший спосіб зробити це — відредагувати файл запуску QGIS.

Якщо використовується інсталятор OSGeo4W, файл можна знайти у каталозі bin директорії, де встановлено OSGeo4W. Шукайте щось на кшалт C:\OSGeo4W\bin\qgis-unstable.bat.

Далі описується настройка PyScripter IDE:

  • зробіть копію qgis-unstable.bat та перейменуйте його в pyscripter.bat

  • відкрийте цей файл у текстовому редакторі та видаліть останній рядок, який відповідає за запуск QGIS

  • додайте рядок запуску PyScripter з параметром, що вказує версію Python, яку слід використовувати (у випадку QGIS 2.0 це 2.7)

  • додайте ще один параметр, що вказує на каталог, де PyScripter повинен шукати бібліотеки Python QGIS. Зазвичай це каталог bin директорії, де встановлено OSGeo4W

    @echo off
    SET OSGEO4W_ROOT=C:\OSGeo4W
    call "%OSGEO4W_ROOT%"\bin\o4w_env.bat
    call "%OSGEO4W_ROOT%"\bin\gdal16.bat
    @echo off
    path %PATH%;%GISBASE%\bin
    Start C:\pyscripter\pyscripter.exe --python25 --pythondllpath=C:\OSGeo4W\bin

Тепер після запуску цього командного файлу буде встановлено необхідні змінні оточення та запущено PyScripter.

Більш популярна ніж PyScripter, Eclipse використовується багатьма розробниками. У наступному розділі ми розглянемо її настройку для розробки та тестування плаґінів. Але спочатку необхідно підготувати ваше робоче оточення. Для використання Eclipse у Windows також необхідно створити командний файл для запуску IDE.

Для цього:

  • знайдіть каталог, в якому розміщено qgis_core.dll. Зазвичай це C:OSGeo4Wappsqgisbin, але якщо ви збирали QGIS самостійно, то швидше за все файл буде у каталозі output/bin/RelWithDebInfo

  • знайдіть каталог, де знаходиться eclipse.exe

  • створіть командний файл з наступним вмістом та використовуйте його для запуску Eclipse

call "C:\OSGeo4W\bin\o4w_env.bat"
set PATH=%PATH%;C:\path\to\your\qgis_core.dll\parent\folder
C:\path\to\your\eclipse.exe

Зневадження в Eclipse та PyDev

Встановлення

Для роботи з Eclipse переконайтеся, що встановили наступні програми:

  • Eclipse
  • Aptana Eclipse Plugin або PyDev

  • QGIS 2.0

Підготовка QGIS

Спочатку слід підготувати QGIS. Нам знадобляться плаґіни Remote Debug та Plugin reloader.

  • Зайдіть у меню Плаґіни ‣ Управління плаґінами

  • знайдіть плаґін Remote Debug (на момент написання він мав статус експериментального, то ж якщо не можете його знайти — включіть відображення експериментальних плаґінів на вкладці Настройки). Встановіть його.

  • знайдіть плаґін Plugin Reloader і також встановіть його. Це дозволить вам перезавантажувати модуль, а не закривати та знову запускати QGIS.

Настройка Eclipse

Створіть новий проект у Eclipse. Ви можете вибрати General Project і додати реальні файли пізніше, тобто зараз немає значення де саме буде розміщено проект.

../../_images/eclipsenewproject.png

Проект Eclipse

Клацніть правою клавішею миші на новому проекті та виберіть New ‣ Folder.

Натисніть кнопку [Advanced] та виберіть Link to alternate location (Linked Folder). Якщо ви вже маєте код, який необхідно зневаджувати, виберіть цей пункт, якщо ж не — створіть новий каталог як було написано вище.

Після цього у Project Explorer з’явиться дерево вихідних кодів і ви можете починати працювати з кодом. У вашому розпорядженні підсвітка синтаксису та інші інструменти IDE.

Настройка зневаджувача

Щоб зневаджувач запрацював відкрийте Debug perspective в Eclipse (Window ‣ Open Perspective ‣ Other ‣ Debug).

Потім запустить зневаджувальний сервер PyDev, вибравши PyDev ‣ Start Debug Server.

Тепер Eclipse очікує підключення до зневаджувального сервера зі сторони QGIS. Тільки-но QGIS підключиться до зневаджувального сервера, Eclipse зможе контролювати сценарії Python. Саме для цього ми встановили плаґін Remote Debug. Отже запускаємо QGIS, якщо цього зе не зроблено, а потім запускаємо модуль Remote Debug.

Після цього можна встановлювати точку зупинки, і як тільки виконання дійде до неї, ви зможете перевірити поточний стан свого плаґіна. (Точка зупинки це зелена точки на зображені нижче, встановлюються вони подвійним клацанням на білій смузі поряд з рядком на якому її необхідно встановити)

../../_images/breakpoint.png

Точка зупинки

Дуже корисним інструментом, який зараз можна використовувати, є зневаджувальна консоль. Перш ніж використовувати її переконайтесь, що виконання зараз зупинилось у точці зупинки.

Відкрийте консоль (Window ‣ Show view). Ви побачите консоль зневаджувального сервера, де нічого цікавого немає. Але після натискання на кнопку [Open Console] вона перетворюється на значно цікавішу консоль зневадження PyDev. Натисніть на стрілку поруч з кнопкою [Open Console] та виберіть PyDev Console. З’явиться вікно з питанням, яку консоль ви хочете активувати. Виберіть PyDev Debug Console. Якщо цей пункт недоступний та вас просять запустити зневаджувач та вказати правильний фрейм, переконайтесь, що ви знаходитесь у режимі зневадження та виконання зупинилось у казаній точці зупинки.

../../_images/console-buttons.png

Зневаджувальна консоль PyDev

Тепер у вас є інтерактивна консоль, у якій можна виконувати будь-які команди у поточному контексті. Ви можете маніпулювати змінними, викликати різні методи API і таке інше.

Трохи дратує те, що після кожної виконаної команди консоль переключається до зневаджувального сервера. Щоб змінити цю поведінку натисніть кнопку Pin Console коли знаходитись на сторінці зневаджувального сервера. Ваш вибір повинен зберегтися принаймні для поточної сесії зневадження.

Підключення файлів API до Eclipse

Дуже зручно, коли Eclipse знає API QGIS. Це значно зменшує кількість друкарських помилок, а крім того, дозволяє використовувати автозавершення коду викликів API.

Для цього Eclipse необхідно проаналізувати файли бібліотек QGIS та витягти з них необхідну інформацію. Вам треба тільки вказати Eclipse де саме шукати ці бібліотеки.

Виберіть Window ‣ Preferences ‣ PyDev ‣ Interpreter ‣ Python.

У верхній частині вікна знаходяться налаштовані інтерпретатори Python (у нашому випадку тільки Python 2.7 для QGIS), а в нижній частині — декілька вкладок. Нас цікавлять вкладки Libraries та Forced Builtins.

../../_images/interpreter-libraries.png

Зневаджувальна консоль PyDev

Спочатку перейдіть на вкладку Libraries. Натисніть [New Folder] та вкажіть каталог Python вашої встановленої QGIS. Якщо ви не знаєте де цей каталог знаходиться (це не каталог плаґінів!), відкрийте QGIS, активуйте консоль Python та виконайте команду qgis. Результатом цієї команди буде список плаґінів та їх каталоги. Відкиньте /qgis/__init__.pyc з цього шляху та отримаєте шуканий каталог.

Також необхідно додати каталог плаґінів (в Linux це ~/.qgis2/python/plugins).

Тепер перейдіть на вкладку Forced Builtins, натисніть [New...] та введіть qgis. Це змусить Eclipse проаналізувати API QGIS. Швидше за все ви також захочете щоб Eclipse знала й API PyQt4. Тому додайте PyQt4 як forced builtin. Можливо, цей пункт уже буде присутній на вашій вкладці.

Натисніть [OK] щоб закінчити.

Зверніть увагу: кожного разу, коли API QGIS змінюється (наприклад, коли ви перезібрали QGIS і файли SIP змінилися), необхідно повертатися на ці вкладки та натискати [Apply] щоб Eclipse проаналізували бібліотеки знову.

Інший варіант настройки Eclipse для роботи з плаґінами QGIS описано тут.

Зневадження з PDB

Якщо ви не користуєтесь такими IDE як Eclipse, ви можете зневаджувати за допомогою PDB. Для цього:

додайте наступний код, у місце, яке необхідно зневадити

# Use pdb for debugging
import pdb
# These lines allow you to set a breakpoint in the app
pyqtRemoveInputHook()
pdb.set_trace()

тепер запустить QGIS з командного рядка

в Linux виконайте:

$ ./Qgis

в Mac OS X виконайте:

$ /Applications/Qgis.app/Contents/MacOS/Qgis

Як тільки програма дійде до вашої точки зупинки, консоль стане доступною і ви зможете виконувати будь-які команди!

TODO:
Add testing information