====== 1. Úvod ====== ===== Cíle cvičení ===== * instalace programovacího jazyka Python a vhodného programovacího prostředí ===== Důležité odkazy ===== [[https://gitlab.fel.cvut.cz/spicajak/navrh-systemu-iot/-/tree/main/lecture-01|Gitlab - podklady pro Cvičení 1]] [[https://docs.python.org/3/|Dokumentace jazyka Python]] [[https://code.visualstudio.com/download|Download - Visual Studio Code]] [[https://www.python.org/downloads/|Download - Python]] ===== Návod ke cvičení ===== ==== Instalace Pythonu ==== Mnoho operačních systémů, včetně macOS a Linuxu, obsahuje předinstalovaný Python. Verze Pythonu dodávaná s operačním systémem se nazývá systémový python. Systémový Python je používán operačním systémem a je obvykle zastaralý. Je nezbytné, abyste měli nejnovější verzi Pythonu abyste mohli úspěšně postupovat podle příkladů v tomto předmětu. **Nepokoušejte se odinstalovat systémový Python!** V počítači můžete mít nainstalováno více verzí jazyka Python. V této lekci nainstalujete nejnovější verzi Pythonu 3 paralelně se systémovým Pythonem, který již na vašem počítači může existovat. === Instalce na Windows === Systém windows se obvykle nedodává se systémovým Pythonem. Instalace naštěstí nezahrnuje nic víc než stažení a spuštění instalačního programu Pythonu z webových stránek [[https://www.python.org/downloads/|Python.org]] **Krok 1: Stažení instalačního programu Python3:** Otevřete webový prohlížeč a přejděte na následující URL adresu: [[https://www.python.org/downloads/windows/|Python Releases for Windows]] Klikněte na 'Latest Python 3 Release - Python 3.x.x', které se nachází pod nadpisem 'Python Releases for Windows' v horní části stránky. Poté přejeďte na konec a kliknutím na instalační soubor Windows x86-64 spusťte stahování. Pokud je váš systém vybaven 32bitovým procesorem, měli byste zvolit 32bitový instalační soubor. Pokud si nejste jisti, zda je váš počítač 32bitový nebo 64bitový, spusťte Windows PowerShell s příkazem ''systeminfo'' a najděte položku ''System type''. **Krok 2: Spuštění instalačního programu:** Otevřete stažené soubory v Průzkumníku Windows a poklepáním na soubor spusťte instalační program. Zobrazí se dialogové okno, které vypadá následovně: Ujistěte se, že jste zaškrtli políčko ''Add Python 3.x to PATH''. Pokud nainstalujete Python bez zaškrtnutí tohoto políčka, můžete znovu spustit instalační program a zaškrtnout jej. Kliknutím na tlačítko ''Install now'' nainstalujete Python 3. Počkejte na dokončení instalace. **Krok 3: IDE** Je možné použít vývojové prostředí dle vašich preferencí: * Visual Studio Code (doporučeno) - [[https://code.visualstudio.com/docs/python/python-tutorial|Tutorial for Python in Visual Studio Code]] * PyCharm - [[https://www.jetbrains.com/help/pycharm/quick-start-guide.html|Quick start guide]] * Sublime Text - [[https://www.sublimetext.com/download | Download Sublime Text 4]] * Zed - [[https://zed.dev/docs/getting-started| Getting started]] === Interaktivní režim a režim skriptování === V interaktivním režimu zadáváte kód přímo do interpretu jazyka Python. To je užitečné pro zkoušení malých fragmentů kódu nebo pro testování věcí během jejich psaní. Do interaktivního režimu lze vstoupit pomocí softwaru IDLE (Interactive Development and Learning Environment) nebo zadáním příkazu `> python` do příkazové řádky. V režimu skriptování napíšete kód do souboru .py a spustíte jej příkazem Python. Jedná se o nejběžnější způsob, jakým lidé používají Python, protože umožňuje psát a ukládat kód, abyste ho mohli později použít znovu. === Hello World === Otevřete vámi vybrané IDE a vytvořte novou složku, např. `lec01`. Pro VS code lze použít následující PowerShell příkazy: > mkdir lec01 > cd .\lec01\ > code . Vytvořte nový soubor ''hello_world.py'': # lec01 - hello_world.py print("Hello, World!") Skript můžete spustit dvěma způsoby: - Příkaz ''> python .\hello_world.py'' (nutné spustit v adresáři, ve kterém se hello_world.py nachází). - V pravém horním rohu kliknout na tlačítko ''Run Python file''. === Zpracování chyb === Každý dělá chyby - zejména při programování. Pokud jste ještě žádnou chybu neudělali, pojďme něco schválně pokazit, abychom věděli, co se stane. Nejčastěji se setkáte se dvěma hlavními typy chyb: syntaxe a runtime chybami. **Chyby syntaxe:** Chyba syntaxe nastane, když napíšete kód, který není v jazyce Python povolen. Vytvořme chybu syntaxe odstraněním poslední uvozovky z kódu v souboru hello_world.py: # lec01 - hello_world.py print("Hello, World!) Po spuštění skriptu by se měla vrátit chyba ''SyntaxError: unterminated string literal (detected at line 2).'' V překladu "Neukončený řetězcový literál". Řetězcový literál je text uzavřený v uvozovkách. ''"Hello, World!"'' je řetězcový literál. **Runtime chyby:** VS Code je většinou schopný zachytit chyby syntaxe ještě před spuštěním programu. Naproti tomu runtime chyby se objevují až během běhu programu. K vygenerování runtime chyby odstraňte obě uvozovky v souboru ''hello_world.py'': # lec01 - hello_world.py print(Hello, World!) Po odstranění uvozovek se změnila barva textu "Hello, World!". VS Code již nerozpoznává "Hello, World!" jako text. Po spuštění by se měla vrátit chyba ''NameError: name 'Hello' is not defined''. Kdykoli dojde k chybě, Python zastaví běh programu a zobrazí několik řádků textu, kterému se říká **traceback**. Traceback zobrazuje užitečné informace o chybě. Tracebacky je nejlepší číst zdola nahoru: - Na posledním řádky tracebacku je uveden název chyby a chybová zpráva. V tomto případě došlo k chybě NameError, protože název Hello není nikde definován. - Na předposledním řádku je uveden kód, který chybu způsobil. V souboru hello_world.py je pouze jeden řádek kódu, takže není těžké uhodnout, kde je problém. Tato informace je užitečnější u větších souborů. - Na dalším řádku je uveden název souboru a číslo řádku, abyste mohli přejít na přesné místo v kódu, kde se chyba vyskytla. ==== Moduly a balíčky ==== V této kapitole se budeme zabývat klíčovými koncepty modulů a balíčků v jazyce Python. Tyto mechanismy hrají klíčovou roli v modulárním programování, což je přístup k vývoji softwaru, kde se rozsáhlý úkol rozděluje na menší, snadněji spravovatelné moduly. Každý modul má svou specifickou funkci, a tyto moduly lze následně kombinovat a skládat dohromady, abychom vytvořili komplexní a dobře organizovanou aplikaci. === Moduly v Pythonu === Modul v Pythonu je soubor obsahující Python kód, který může obsahovat proměnné, funkce a třídy. Tímto způsobem se zamezuje zaplavení globálního jmenného prostoru. Zaplavení globálního jmenného prostoru v jazyce Python nastává, když mnoho proměnných a funkcí sdílí stejné jméno, což může vést k nechtěným konfliktům a nejasnostem v programu. Moduly předcházejí tomuto problému tím, že poskytují izolované jmenné prostory pro svůj obsah. Každý modul má vlastní kontext, ve kterém existují jeho proměnné a funkce, čímž minimalizuje riziko konfliktů a umožňuje programátorovi organizovat kód efektivněji a udržitelněji. **Psaní vlastního modulu:** Vytvoření vlastního modulu je snadné. Stačí vytvořit soubor s příponou ''.py'' a do něj umístit kód. Například, vytvořme modul s názvem ''utils.py'': # lec01 - utils.py def add_numbers(a, b): return a + b def multiply_numbers(a, b): return a * b Nyní můžeme tento modul importovat do jiného souboru a používat jeho funkce: # lec01 - hello_world.py import utils print("Hello, World") result_sum = utils.add_numbers(3, 5) result_product = utils.multiply_numbers(2, 4) print("Součet: ", result_sum) print("Součin: ", result_product) **Vestavěné moduly:** Python obsahuje mnoho vestavěných modulů, které poskytují širokou škálu funkcí. Například modul math poskytuje matematické funkce: import math print(math.sqrt(16)) # Vypíše: 4.0 print(math.factorial(5)) # Vypíše: 120 === Balíčky v Pythonu === Balíček je adresář, který obsahuje kolekci modulů. Tímto způsobem se organizují a hierarchicky uspořádávají moduly podle jejich funkce. Každý balíček musí obsahovat soubor __init__.py, který může být prázdný, ale označuje adresář jako balíček. **Struktura balíčku:** Struktura balíčku může vypadat následovně: my_package/ |-- __init__.py |-- module1.py |-- module2.py |-- subpackage/ | |-- __init__.py | |-- module3.py V tomto příkladu je ''my_package'' hlavní balíček obsahující dva moduly (''module1.py'' a ''module2.py'') a podbalíček ''subpackage'', který obsahuje modul ''module3.py''. **Importování modulu z balíčku:** Moduly z balíčku lze importovat několika způsoby. Například pro import modulu ''module1.py'' z balíčku ''my_package'': from my_package import module1 module1.some_function() Pokud chcete importovat celý balíček, můžete použít: import my_package my_package.module1.some_function() **Příklad balíčku:** Uvažujme balíček pro práci s geometrickými tvary: # lec01 - shapes/__init__.py # Prázdný soubor, označuje, že 'shapes' je balíček. # lec01 - shapes/circle.py import math def area(radius): return math.pi * radius**2 def circumference(radius): return 2 * math.pi * radius # lec01 - shapes/rectangle.py def area(length, width): return length * width def perimeter(length, width): return 2 * (length + width) Tímto způsobem můžeme importovat a používat funkce pro kruhy a obdélníky zvlášť: # lec01 - geometry.py from shapes import circle, rectangle radius = 5 length = 4 width = 6 circle_area = circle.area(radius) circle_circumference = circle.circumference(radius) rectangle_area = rectangle.area(length, width) rectangle_perimeter = rectangle.perimeter(length, width) print("Kruh - Plocha:", circle_area, "Obvod:", circle_circumference) print("Obdélník - Plocha:", rectangle_area, "Obvod:", rectangle_perimeter) === Správa balíčků pomocí PIPu === PIP je nástroj pro instalaci a správu balíčků v jazyce Python. Jeho název pochází z anglického výrazu "Pip Installs Packages" a slouží k jednoduchému stahování a instalaci externích balíčků do vašeho Pythonového prostředí. **Instalace balíčků:** Pro instalaci balíčku pomocí PIPu stačí použít příkaz ''pip install''. Například, chceme-li nainstalovat balíček ''requests'', který se často používá pro HTTP požadavky, provedeme následující: pip install requests Tímto příkazem PIP stáhne a nainstaluje balíček requests a jeho závislosti. Po dokončení instalace můžeme v kódu Pythonu importovat balíček a používat jeho funkce. import requests response = requests.get("https://www.example.com") print(response.text) **Zobrazení instalovaných balíčků:** Pro zobrazení všech nainstalovaných balíčků a jejich verzí můžeme použít příkaz: pip list Tento příkaz vypíše seznam všech balíčků a jejich verzí nainstalovaných v aktuálním Pythonovém prostředí. **Aktualizace balíčků:** Pro aktualizaci konkrétního balíčku na nejnovější verzi můžeme použít: pip install --upgrade **Instalace balíčků ze souboru Requirements.txt:** Soubor ''requirements.txt'' je textový soubor, který slouží k definování seznamu balíčků a jejich verzí, které jsou nezbytné pro správný běh vašeho Pythonového projektu. Tento soubor umožňuje jednoduchou a opakovatelnou instalaci všech potřebných závislostí. Pravidla pro strukturu ''requirements.txt'' jsou jednoduchá. Každý řádek obsahuje název balíčku a volitelně specifikuje požadovanou verzi. Typický zápis vypadá takto: requests==2.26.0 numpy>=1.21.0,<2.0.0 flask Pokud není specifikována verze, PIP nainstaluje nejnovější verzi balíčku. Vytvořit soubor ''requirements.txt'' můžete manuálně nebo můžete využít nástroje, jako je pip freeze, který automaticky generuje seznam všech nainstalovaných balíčků s jejich verzemi v aktuálním Pythonovém prostředí. Příklad použití v terminálu: pip freeze > requirements.txt Pro instalaci všech balíčků uvedených v requirements.txt použijte následující příkaz: pip install -r requirements.txt ==== Virtuální prostředí ==== Virtuální prostředí jsou klíčovým nástrojem pro izolaci projektů, což umožňuje každému projektu používat své vlastní verze závislostí balíčků a Pythonu. Tím se minimalizuje riziko konfliktů mezi projekty a umožňuje snadnou reprodukci vývojového prostředí. **Vytvoření a aktivace:** Pro vytvoření nového virtuálního prostředí použijeme příkaz ''python -m venv'' následovaný názvem cílového adresáře pro virtuální prostředí. Například: python -m venv my_virtual_environment Pro aktivaci virtuálního prostředí v rámci příkazové řádky použijeme skript: my_virtual_environment\Scripts\activate Po aktivaci virtuálního prostředí se před názvem příkazové řádky obvykle zobrazí název virtuálního prostředí, což signalizuje, že jsme nyní v tomto prostředí. **Izolace externích závislostí:** Izolace externích závislostí je jedním z hlavních důvodů používání virtuálních prostředí. Každý projekt může mít svůj vlastní soubor ''requirements.txt'' s definovanými verzemi závislých balíčků. Při aktivaci virtuálního prostředí se pak instalují pouze tyto závislosti, což umožňuje snadnou správu projektových závislostí. **Vytváření virtuálního prostředí s volitelnými argumenty:** Příkaz ''python -m venv'' podporuje také různé volitelné argumenty pro přizpůsobení virtuálního prostředí. Například, můžeme specifikovat cestu k interpretru Pythonu nebo změnit chování generování skriptů pro aktivaci prostředí. python -m venv --system-site-packages my_virtual_environment Tento příkaz umožňuje virtuálnímu prostředí sdílet systémové balíčky, což může být užitečné v některých situacích. **Deaktivace a odstranění:** Deaktivace virtuálního prostředí se provede pomocí příkazu ''deactivate''. Odstranění virtuálního prostředí lze provést jednoduše smazáním odpovídajícího adresáře. **Další nástroje pro správu verzí a virtuálních prostředí:** Vedle modulu ''venv'' existují i další nástroje pro správu verzí jazyka Python a virtuálních prostředí, jako jsou ''virtualenv'' nebo ''conda''. Tyto nástroje poskytují další možnosti a funkce pro správu a konfiguraci virtuálních prostředí.