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

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

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

On Linux there is no additional configuration needed to develop plug-ins. But on Windows you need to make sure you that you have the same environment settings and use the same libraries and interpreter as QGIS. The fastest way to do this, is to modify the startup batch file of QGIS.

If you used the OSGeo4W Installer, you can find this under the bin folder of your OSGoeW install. Look for something like C:\OSGeo4W\bin\qgis-unstable.bat.

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

  • Make a copy of qgis-unstable.bat and rename it pyscripter.bat.

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

  • Add a line that points to the your Pyscripter executable and add the commandline argument that sets the version of Python to be used (2.7 in the case of QGIS 2.0)

  • додайте ще один параметр, що вказує на каталог, де 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.

More popular that Pyscripter, Eclipse is a common choice among developers. In the following sections, we will be explaining how to configure it for developing and testing plugins. To prepare your environment for using Eclipse in Windows, you should also create a batch file and use it to start Eclipse.

To create that batch file, follow these steps.

  • Locate the folder where file:qgis_core.dll resides in. Normally this is C:OSGeo4Wappsqgisbin, but if you compiled your own QGIS application this is in your build folder in 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 or PyDev
  • QGIS 2.0

Підготовка QGIS

There is some preparation to be done on QGIS itself. Two plugins are of interest: Remote Debug and Plugin reloader.

  • Go to Plugins ‣ Fetch python plugins
  • Search for Remote Debug ( at the moment it’s still experimental, so enable experimental plugins under the Options tab in case it does not show up ). Install it.
  • знайдіть плаґін Plugin Reloader і також встановіть його. Це дозволить вам перезавантажувати модуль, а не закривати та знову запускати QGIS.

Настройка Eclipse

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

../../_images/eclipsenewproject.png

Проект Eclipse

Now right click your new project and choose New ‣ Folder.

Click [Advanced] and choose Link to alternate location (Linked Folder). In case you already have sources you want to debug, choose these, in case you don’t, create a folder as it was already explained

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

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

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

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

Eclipse is now waiting for a connection from QGIS to its debug server and when QGIS connects to the debug server it will allow it to control the python scripts. That’s exactly what we installed the Remote Debug plugin for. So start QGIS in case you did not already and click the bug symbol .

Now you can set a breakpoint and as soon as the code hits it, execution will stop and you can inspect the current state of your plugin. (The breakpoint is the green dot in the image below, set one by double clicking in the white space left to the line you want the breakpoint to be set)

../../_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 з цього шляху та отримаєте шуканий каталог.

You should also add your plugins folder here (on Linux it is ~/.qgis/python/plugins).

Next jump to the Forced Builtins tab, click on New... and enter qgis. This will make Eclipse parse the QGIS API. You probably also want eclipse to know about the PyQt4 API. Therefore also add PyQt4 as forced builtin. That should probably already be present in your libraries tab.

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

Note: every time the QGIS API changes (e.g. if you’re compiling QGIS master and the SIP file changed), you should go back to this page and simply click Apply. This will let Eclipse parse all the libraries again.

Інший варіант настройки 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 з командного рядка

On Linux do:

$ ./Qgis

On Mac OS X do:

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

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

TODO:
Add testing information