Úprava 17.1.2021: V původní verzi článku nebyly některá nastavení vyřešeny úplně ideálně, mohlo docházet ke kolizím a problémům hlavně s knihovnou PROJ. Upravená verze textu toto řeší a problémy by nastávate neměly.

Psaní ať už jednoduchých skriptů pro GIS nástroje, nebo vývoj pluginů pro GIS software, vyžaduje dobře nastavené vývojové prostředí, které umožní využít na 100% nástroje a možnosti IDE. Zatímco na Linuxu se tento problém až tak neřeší, neb tam je propojení programů a operačního systému vyřešeno velice dobře. Na Windows je process komplikovanější a je zde několik dílčích kroků, které je potřeba provést.

Prvním krokem je vyřešení instalace nástrojů. Existuje samozřejmně možnost nainstalovat samostatně Python, GDAL, QGIS a GRASS, ale jedná se o poměrně dost komplikovanou variantu. Snadnější variantou je použití Condy jako systému pro management Pythonu a Pythonových prostředí (Enviroment). Do Condy, při použití zdroje Conda-forge, lze snadno nainstalovat jak GDAL tak např. i QGIS či starší verzi GRASSu. Bohužel další GIS nástroje není tak snadné skrze Condu instalovat, některé nástroje jsou dostupné ve starších verzích a celkově není instalace úplně 100%. Např. GDAL nainstalovaná skrze Condu není zkompilovaná se všemi dostupnými možnostmi.

Podle mého názoru je nejlepší způsob instalce open-source GIS nástrojů na Windows OSGEO4W instalátor. Jednoduchý průvodce vás provede instalací, s možností zvolit si, které desktopové, command-linové či webové nástroje a knihovny chcete nainstalovat. Zároveň instalátor řeší závislosti programů na knihovnách či knihoven mezi sebou. Dalším plusem je možnost jednodušše instalovat i vývojové verze jako programů (QGIS, GRASS) tak i knihoven (GDAL či PROJ) a mít tak přístup k nejnovějším možnostem těchto nástrojů. OSGEO4W způsobem instalace a managementu kopíruje Linuxový systém a do operačního systému a jeho nastavení příliš nezasahuje, např. nenastavuje žádné systémové proměnné. Část nástrojů se pak spouští pomocí .bat souborů, které si nastaví nezbytná prostředí pro svůj běh. Takto například funguje OSGEO4W Shell, která např. zpřístupní řadu command-line nástrojů pomocí jejich přidání do systémových cest.

Budeme-li tedy chtít na Windows vyvíjet v Pythonu s použitím open-source GIS nástrojů, budeme nejspíš využívat instalaci OSGEO4W. Za nejlepší IDE pro vývoj v Pythonu aktuálně považuji PyCharm, takže nastavení IDE představíme na něm.

Celý problém vývoje v Pythonu s GIS nástroji lze rozdělit na dva dílčí kroky: 1) spuštění IDE tak, aby byly nástroje a knihovny OSGEO4W “viditelné” pro IDE a potažmo Pythonu, 2) nastavení interpretoru Pythonu tak, aby byly viditelné všechny nezbytné Python knihovny.

Předpokládejme, že OSGEO4W je nainstalováno ve výchozí lokaci C:\OSGEO4W64 a Pycharm v adresáři C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2020.2.1.

Prvotním krokem je vytvoření .bat souboru, a jeho uložení do adreáře C:\OSGEO4W64\, který nastaví nezbytné proměnné prostředí a spustí IDE, pro které jsou GIS nástoje “viditelné”. Strukturu tohoto souboru odvodíme z jiných .bat v adresáři C:\OSGEO4W64\bin.

Verze pro použití aktuálních verzí GDAL, PROJ a QGIS

V této situaci se o většinu nastavení postará soubor \bin\o4w_env.bat, který standardně nastavuje prostředí OSGEO4W.

rem @echo off
call "%~dp0\bin\o4w_env.bat"
rem @echo off
path %OSGEO4W_ROOT%\apps\qgis\bin;%PATH%
set QGIS_PREFIX_PATH=%OSGEO4W_ROOT:\=/%/apps/qgis
set GDAL_FILENAME_IS_UTF8=YES
rem Set VSI cache to be used as buffer, see #6448
set VSI_CACHE=TRUE
set VSI_CACHE_SIZE=1000000
set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\qgis\qtplugins;%OSGEO4W_ROOT%\apps\qt5\plugins

start "PyCharm" /B "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2020.2.1\bin\pycharm64.exe" %*

Verze pro použití vývojových verzí GDAL, PROJ a QGIS

Zde je nutné přidat ještě volání souborů qt5_env.bat a gdal-dev-py3-env.bat, které se postarají o správné nastavení pro vývojové verze GDAL a následně i QGIS.

rem @echo off
call "%~dp0\bin\o4w_env.bat"
call qt5_env.bat
call gdal-dev-py3-env.bat
rem @echo off
path %OSGEO4W_ROOT%\apps\qgis-dev\bin;%PATH%
set QGIS_PREFIX_PATH=%OSGEO4W_ROOT:\=/%/apps/qgis-dev
set GDAL_FILENAME_IS_UTF8=YES
rem Set VSI cache to be used as buffer, see #6448
set VSI_CACHE=TRUE
set VSI_CACHE_SIZE=1000000
set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\qgis-dev\qtplugins;%OSGEO4W_ROOT%\apps\qt5\plugins

start "PyCharm" /B "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2020.2.1\bin\pycharm64.exe" %*

Přidání GRASS GIS

Pakliže bychom chtěli zpřístupnit i GRASS GIS pro Python v PyCharm je nutné do .bat souboru před řádek:

rem @echo off

doplnit ještě řádek:

call "%OSGEO4W_ROOT%\apps\grass\grass79\etc\env.bat"

který se postará o nastavení prostředí pro GRASS GIS.

Další možné úpravy

Některé úpravy, které zde můžeme chtít provést se týkají výměny QGIS a GRASS za stabilní verze. To lze provést výměnou souborů a cest v tomto .bat souboru.

  • \apps\grass\grass79\etc\env.bat za \apps\grass\grass78\etc\env.bat
  • /apps/qgis-dev za /apps/qgis
  • \apps\qgis-dev\qtplugins za \apps\qgis\qtplugins

Tyto úpravy lze kombinovat s verzemi jak s vývojovou tak stabilní verzí GDAL a PROJ. Lze tedy používat např. stabilní verzi GDAL a vývojovou verzi QGIS.

Volba jiného IDE

Poslední řádek pak spouští IDE, a tento řádek tedy můžeme vyměnit za volání jiného IDE, kterému budou nastavené cesty a sytémové proměnné přístupné. Z tohoto .bat souboru vytvoříme zástupce na ploše, pomocí něhož budeme následně IDE spouštět.

Nastavení interpretoru Pythonu v PyCharm

Následně je třeba v IDE nastavit správně interpetor Pythonu na Python distribuovaný s OSGEO4W. Toto nastavení je File -> Settings -> Project: jmeno_projektu a zde změnit cestu k Python interpretoru na adresář OSGEO4W a následně \apps\Python37\python.exe (část cesty Python37 se může změnit např. na Python38 v momentě kdy OSGEO4W začne být distribuováno s Python verze 3.8). Nastavení ukazuje následující screenshot.

Pycharm nastavení interpretoru

Nastavení interpretoru identifikuje většinu cest správně, ale je třeba manuálně doplnit cesty ke knihovnám QGIS a GRASS. To lze udělat úpravou cest interpretoru v PyCharm, kam přidáme tři položky. Konrétně se jedná o cesty, a všechny začínájí v adresáři instalace OSGEO4W:

C:\OSGEO4W64\apps\grass\grass79\etc\python
C:\OSGEO4W64\apps\qgis-dev\python
C:\OSGEO4W64\apps\qgis-dev\python\plugins

Zde lze opět vyměnit cesty za stabilní verze QGIS a GRASS GIS. Jak bylo zmíněno výše (v Další možné úpravy). Je ale třeba mít na paměti, že verze použití v .bat souboru by měly odpovídat zde nastavený cestám. Je samozřejmně možné v PyCharm nastavit dva interpetory, použivající stejnou verzi Pythonu, ale s rozdílnými cestami přidaným knihovnám. Což umožní, přepínat mezi těmi interpetory dle potřeby.

Screenshot ukazuje toto nastavení.

Pycharm nastavení doplňkových cest pro interpetor

Tento krok by bylo možné teoreticky nahradit i úpravou souboru nastavujícího prostředí Pythonu (py3_env.bat), kde by se tyto cesty přidaly přímo. Nicméně pro potřeby vývoje je vhodnější je přidat pouze v IDE.

Výsledek

Takto nastavené IDE umožňuje spouštět skripty s využívající Python API QGIS i GRASS. Pokud v PyCharm budeme používat možnosti Python modulu typing a budeme typovat proměnné, pak bude IDE napovídat k příslušným objektům jejich metody. Bohužel, Python API pro QGIS je generované z C++ a tudíž typování v Pythonu nepodporuje a nutné je dělat pro proměnné ručně (viz obrázek dole).

Pycharm typování proměnných a nápověda IDE

Takto nastavené IDE umožňuje jak přímo spouštět Python kód využívající jak QGIS tak GRASS API, tak i výrazně zpříjemňuje vývoj kód spouštěné odjinud (např. pluginy pro QGIS).

Zdroje

Poznatky v tomto příspěvku jsou složené z několika zdrojů:

Stand-alone PyQGIS scripts with OSGeo4W

Using PyCharm as an IDE for QGIS 3 plugin development

How to setup PyCharm for QGIS development

How to set environment for PyQGIS 3 in PyCharm