Ú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.
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í.
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).
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