Spustitelné programy

Programování v GIS 2

Jan Caha

2025-05-05

Skripty

  • dobře se tvoří, používají z prostředí VS Code, kde je možnost přímo upravovat a spouštět Python kód
  • pro běžné uživatele už dost komplikované
  • některé parametry jsou dost očividné a mění se poměrně často (třeba i každým během skriptu)
  • nejjednodušší forma je program z příkazové řádky s parametry příkazové řádky

Jak řešit v Pythonu

  • v rámci Pythonu v balíčku sys máme sys.argv, kde máme přístup k parametrům skriptů
    • velice složité a neflexibilní
  • argparse nativní knihovna Pythonu, která umožňuje nastavit parametry skriptu
  • click externí knihovna, která plní podobnou funkci jako argparse, ale má komplexnější možnosti

Použití argparse

Parametry

  • dva druhy
    • poziční - nepojmenované a obvykle povinné
    • pojmenované - obvykle nepovinné, buď předáváme hodnotu nebo pouze parametr (přepínače)
program vstupni_soubor [-o vystupni_soubor] [-d] [--calculate_using=scipy]
  • v příkladu se vstupni_soubor musí zadat, jinak program nebude fungovat
  • v příkladu má výstupní soubor výchozí název (např. output.pdf) a dva parametry, které nemusíme zadávat

Příklad tvorby

import argparse
from pathlib import Path

parser = argparse.ArgumentParser(prog="calculate", description='Skript pro výpočet hodnoty.')
    
# Definice argumentů
parser.add_argument('a', help='Hodnota a', type=float)
parser.add_argument('b', help='Hodnota b', type=float)
parser.add_argument('-o', '--operator', help='Operátor s hodnotami', default='*', type=str, choices=['*', '/', '+', '-'])
parser.add_argument('-r', '--result', help='Výsledný soubor', type=Path, default=Path("vysledek.txt"))

Přístup k argumentům

  • v proměnné args budou všechny proměnné uložené a dostupné
# Zpracování argumentů
args = parser.parse_args()

# Příklady
if args.operator == "*":
    result = float(args.a) * float(args.b)

with open(args.result, "w", encoding="utf-8") as file:
    file.write(f"Výsledek: {result}\n")

Další nastavení

  • lze vytvářet i komplexnější nastavení, např. subprogramy
program sub_program_a [argumenty_pro_a]
program sub_program_b [argumenty_pro_b]
  • komplexnější nastavení parametrů

Tvorba samospustitelných souborů

pyinstaller

  • program, který umí zabalit Pythonový skript do samospustitelného souboru
  • funguje dobře, pokud se nevyužívají složité konstrukce pro import externích knihoven (např. GDAL/OGR je na hraně)
  • vznikne exe soubor, pro samostatné spuštění
  • zabalí Python interpretor a použité knihovny do jednoho souboru
  • občas je třeba vytvořit konfigurační soubor s definicí co vše se má importovat (externí soubory a knihovny)
pip install pyinstaller # (conda install pyinstaller)
pyinstaller --onefile muj_skript.py

Závěr předmětu

Závěr

  • Python jako lingua franca pro vývoj skriptů a programů
  • nástroje a knihovny pro geoinformatickou práci a práci s prostorovými daty
  • řada možností nástrojů k prozkoumání a otestování
  • použití nástrojů pro psaní čitelnějšího kódu (formátování + hodnocení chyb)
  • psaní “rozumného” kódu - dělení na funkce o rozumné délce, dělení na moduly, tvorba balíčků
  • vycházet z jednoduchých řešení a postupně nad nimi budovat komplexnější postupy
  • rozumné využití AI při programování, nejen nápověda a tvorba kódu, ale i vysvětlení, explorace a hodnocení kódu snaha o tvorbu lepších programů

Dotazy?