{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# První krůčky" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Připravená instalace pro tuto výuku\n", "\n", "Pro účely tohoto předmětu budeme používat [Jupyter Lab](https://jupyterlab.readthedocs.io/en/stable/),\n", "což je v podstatě webové vývojové prostředí (nejen) pro jazyk Python. Umožňuje pracovat jednak v příkazové řádce,\n", "jednak v režimu notebooku. Jupyter notebook je interaktivní dokument, který obsahuje kód, výstup z kódu, \n", "případně další text, obrázky, matematické rovnice, apod.\n", "\n", "Jupyter Lab je na FJFI přístupný pomocí [JupyterHub](https://jupyter.org/hub) serveru na adrese [https://jupyter.fjfi.cvut.cz](https://jupyter.fjfi.cvut.cz). Přihlásíte se pomocí vašeho školního účtu.\n", "\n", "\n", "\n", "Po úspěšném přihlášení by se vám mělo zobrazit webové prostředí . Vypadá to nějak takto:\n", "\n", "![jupyterhub-fjfi-first-time.png](./jupyterhub-fjfi-first-time.png)\n", "\n", "❗ **Vyzkoušejte si všechny následující příklady použití Pythonu v Jupyter Labu ❗**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Příkazová řádka (terminál)\n", "\n", "Pro následující kroky budeme potřebovat příkazovou řádku. V Jupyter Labu se k ní dostanete v okně \"Launcher\" kliknutím na \"Terminal\" v sekci \"Other\":\n", "\n", "![jupyterlab-new-terminal.png](jupyterlab-new-terminal.png)\n", "\n", "Měl by se vám otevřít panel s příkazovou řádkou:\n", "\n", "![jupyterhub-terminal.png](jupyterhub-terminal.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Základní interpret\n", "\n", "Python je *interpretovaný* jazyk. Abychom spustili program, potřebujeme interpret. Tím je standardně program `python` (`python.exe` na MS Windows), přesnějí řečeno CPython -- interpret jazyka Python napsaný v C. Pokud ho spustíme, měli bychom vidět přibližně toto:\n", "\n", " $ python\n", " Python 3.11.7 (main, Jan 29 2024, 16:03:57) [GCC 13.2.1 20230801] on linux\n", " Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n", " >>> \n", "\n", "`>>>` je začátek vstupního řádku, kam můžeme psát příkazy. Např. \"Hello world!\" už jsme viděli:\n", "\n", " >>> print(\"Hello world!\")\n", " Hello world!\n", "\n", "Python interpret ukončíte klávesami `ctrl + d` nebo příkazem `exit()`.\n", "\n", "Takto to vypadá v prostředí Jupyter Lab:\n", "\n", "![jupyterlab-basic-interpreter.png](jupyterlab-basic-interpreter.png)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## IPython -- komfortní práce v příkazové řádce\n", "\n", "Téměř nezbytým rozšířením Python interpretru pro interaktivní práci v příkazové řádce je [IPython](https://github.com/ipython/ipython). Ten přidává lepší dokončení pomocí tab klávesy, vyhledávání v historii a další vylepšení. Pojďme ho zkusit, stačí v příkazové řádce napsat `ipython`:\n", "\n", " $ ipython\n", " Python 3.11.7 (main, Jan 29 2024, 16:03:57) [GCC 13.2.1 20230801]\n", " Type 'copyright', 'credits' or 'license' for more information\n", " IPython 8.21.0 -- An enhanced Interactive Python. Type '?' for help.\n", "\n", " In [1]: \n", "\n", "A v našem Jupyter Lab:\n", "\n", "![jupyterlab-ipython.png](jupyterlab-ipython.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dokončení tab klávesou (*tab completion*)\n", "Po napsání jednoho nebo více písmen a zmáčknutí `tab` klávesy se objeví možná dokončení (podle kontextu). Zkuste napsat `pr` a zmáčknout `tab`:\n", "\n", " In [1]: pr\n", " %%prun %precision %profile %prun print property \n", "\n", "### Historie\n", "Historii lze procházet pomocí šipek nahoru a dolů. Historii zobrazíme také příkazem **`hist`** (úplně správně je to `%hist` -- viz níže). V historii lze také hledat. Podobně jako u tab klávesy, po napsání několika písmen se po zmáčknutí šipky zobrazují příkazy z historie, které těmito písmeny začínají.\n", "\n", "### Nápověda\n", "Nápovědu (nejen) k funkcím zobrazíme funkcí **`help`** nebo připojením **`?`** za příslušný příkaz:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on built-in function print in module builtins:\n", "\n", "print(...)\n", " print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n", " \n", " Prints the values to a stream, or to sys.stdout by default.\n", " Optional keyword arguments:\n", " file: a file-like object (stream); defaults to the current sys.stdout.\n", " sep: string inserted between values, default a space.\n", " end: string appended after the last value, default a newline.\n", " flush: whether to forcibly flush the stream.\n", "\n" ] } ], "source": [ "help(print)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Triky (*magics*)\n", "IPython přidává k samotným Python příkazům chytré triky, tzv. *magics*. Poznáme je podle toho, že začínají `%`. Jedním takovým trikem je `%automagick`, který nám umožnil použít `hist` místo `%hist`.\n", "\n", " In [3]: %automagic?\n", " Type: Magic function\n", " String Form:>\n", " Namespace: IPython internal\n", " File: /usr/lib/python2.7/site-packages/IPython/core/magics/auto.py\n", " Definition: %automagic(self, parameter_s='')\n", " Docstring:\n", " Make magic functions callable without having to type the initial %.\n", "\n", " Without argumentsl toggles on/off (when off, you must call it as\n", " %automagic, of course). With arguments it sets the value, and you can\n", " use any of (case insensitive):\n", "\n", " - on, 1, True: to activate\n", "\n", " - off, 0, False: to deactivate.\n", "\n", " Note that magic functions have lowest priority, so if there's a\n", " variable whose name collides with that of a magic fn, automagic won't\n", " work for that function (you get the variable instead). However, if you\n", " delete the variable (del var), the previously shadowed magic function\n", " becomes visible to automagic again.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## První jednoduchý program\n", "(I)Python můžeme s úspěchem používat jako kalkulačku. Zkuste si následující příklady spusti v `python` (případně `ipython`) rozhraní:\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "5.0" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 + 8 / 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Trochu složitější výpočet můžeme strukturovat pomocí proměnných. Takto např. vypočítáme obsah lichoběžníku." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "21.56" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = 3.5\n", "b = 2.1\n", "v = 77e-1\n", "(a + b) * v / 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Případně můžeme vstupy i výsledek vypsat formátovaně:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Obsah lichoběžníku a=3.5, b=2.1, v=7.7 je: S=21.56\n" ] } ], "source": [ "S = (a + b) * v / 2\n", "print(f\"Obsah lichoběžníku {a=}, {b=}, {v=} je: {S=}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Virtuální prostředí\n", "\n", "Virtuální prostředí v Pythonu je způsob, jak izolovat různé projekty od sebe. Každý projekt může mít své vlastní závislosti na knihovnách, které mohou být různé. Virtuální prostředí nám umožňuje mít různé verze knihoven pro různé projekty.\n", "\n", "Pro práci s virtuálními prostředími v Pythonu se používá knihovna `venv`. Základní kroky jsou \n", "1. Vytvoření nového virtuálního prostředí příkazem `python -m venv `.\n", "2. Přepnutí do prostředí příkazem `source /bin/activate` (na MS Windows je to `.\\env\\Scripts\\activate`).\n", "\n", "Pro lepší orientaci a podrobné vysvětlení si projděte článek [Python Virtual Environments: A Primer](https://realpython.com/python-virtual-environments-a-primer/).\n", "\n", "### Vytvoření prostředí pro tento kurz\n", "\n", "Pro tento kurz si vytvoříme nové prostředí na našem JupyterHub serveru. V příkazové řádce postupně zadejte následující příkazy:\n", "\n", "1. vytvoření nového adresáře `python` a přepnutí do něj\n", "```\n", "mkdir python\n", "cd python\n", "```\n", "2. vytvoření nového virtuálního prostředí v adresáři `.venv` (`.venv` je běžná konvence pro pojmenování virtuálních prostředí)\n", "```\n", "python -m venv .venv\n", "```\n", "3. přepnutí do nově vytvořeného prostředí\n", "```\n", "source .venv/bin/activate\n", "```\n", "\n", "Vaše příkazová by poté měla vypadat nějak takto:\n", "```\n", "(.venv) 0 urbanjak@jupyter:~/python$\n", "```\n", "`(.venv)` na začátku řádky značí, že jste v aktivovaném virtuálním prostředí. `~/python` je aktuální adresář. Právě v tomto adresáři jsme vytvořili nové virtuální prostředí a budeme do něj ukládat soubory pro tento kurz.\n", "\n", "### Přepínání do výukového prostředí\n", "\n", "Kdykoli se znovu přihlásíte na JupyterHub, nebo si jen spustíte nový terminál, musíte se vždy přepnout do toho správného virtuálního prostředí. To uděláte následujícími příkazy:\n", "\n", "```\n", "cd ~/python\n", "source .venv/bin/activate\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Práce s notebooky\n", "\n", "Jak už jsme zmínili výše, notebook je interaktivní dokument, který obsahuje buňky s (Python) kódem, výstup z kódu, případně další text, obrázky, apod. \n", "*Všechny materiály pro tento kurz jsou k dispozici jako Jupyter notebooky.*\n", "\n", "O práci s notebooky se dozvíte více v článku [Jupyter Notebook: An Introduction](https://realpython.com/jupyter-notebook-introduction/).\n", "\n", "### Registrace našeho prostředí v Jupyter Labu\n", "Dříve než začneme pracovat s notebooky, musíme zaregistrovat naše virtuální prostředí jako *kernel* v Jupyter Labu. \n", "Jupyter Lab totiž umožňuje pracovat s notebooky v různých jazycích a prostředích. Aby věděl, jaké kernely má k dispozici, musíme mu je nějakým způsobem nainstalovat. Spusťte následující příkaz (je nutné mít aktivované virtuální prostředí pro tuto výuku!)\n", "\n", "```\n", "python -m ipykernel install --user --name python-fjfi --display-name \"Python FJFI vyuka\"\n", "```\n", "\n", "Toto stačí provést pouze jednou. Po této registraci bude Jupyter Lab vědět, že má k dispozici kernel `Python FJFI vyuka` a můžete začít pracovat s notebooky.\n", "\n", "### První notebook\n", "\n", "1. Nejprve se v Jupyter Lab přepněte do seznamu souborů (ikona 📁 vlevo nahoře).\n", " ![jupyterlab-files.png](jupyterlab-files.png)\n", "2. Změňte adresář na `python` (dvouklik).\n", " ![jupyterlab-python-dir.png](jupyterlab-python-dir.png)\n", "3. Klikněte na modré tlačítko **+** vlevo nahoře - mělo by se otevřít nové `Launcher` okno.\n", " ![jupyterlab-new-launcher.png](jupyterlab-new-launcher.png)\n", "4. Klikněte v sekci `Notebook` na `Python FJFI vyuka` - měl by se otevřít nový notebook.\n", " ![jupyterlab-new-notebook.png](jupyterlab-new-notebook.png)\n", "\n", "Pokud se vše povedlo, měli byste mít otevřené okno s novým notebookem, pojmenovaným `Untitled.ipynb`. Bude to vypadat nějak takto:\n", "\n", "![jupyterlab-first-notebook.png](jupyterlab-first-notebook.png)\n", "\n", "### První kód v notebooku\n", "\n", "1. Zkuste si do první buňky napsat nějaký kód (např. `print(\"Hello notebook!\")`) a spustit ho. Kód v buňce spustíte klávesovou zkratkou *`shift + enter`* nebo kliknutím na tlačítko ▶.\n", "2. Přidejte ještě další buňku s nějaký výpočtem a ověřte, že výsledek se zobrazí pod buňkou, aniž bychom použili funkci `print`.\n", "3. Přejmenujte si notebook na něco smysluplnějšího pomocí `File` -> `Rename Notebook...`.\n", "\n", "Mohlo by to pak vypadat takto:\n", "![jupyterlab-prvni-notebook.png](jupyterlab-prvni-notebook.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Vlastní instalace\n", "\n", "Pro instalaci Pythonu a Jupyter Labu na vlastním počítači doporučujeme použít distribuci [Micromamba](https://mamba.readthedocs.io/en/latest/installation/micromamba-installation.html). Poté dle [dokumentace](https://mamba.readthedocs.io/en/latest/user_guide/micromamba.html) můžete vytvořit nové virtuální prostředí a do něj nainstalovat Jupyter Lab a další baličky potřebné pro tento předmět.\n", "\n", "*Doporučujeme nejprve si osvojit výše popsaný JupyterHub a poté se teprve pustit do instalace na vlastním počítači.*" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.16" } }, "nbformat": 4, "nbformat_minor": 2 }