====== PyCharm ======
[[https://www.jetbrains.com/pycharm/|PyCharm]] je vývojové prostředí pro Python vyvíjené firmou [[https://www.jetbrains.com/|JetBrains]]. Existuje ve 3 verzích:
* //EDU edition//
* //Community edition//
* //Professional edition//
//EDU edition// je k dispozici zdarma a je určena pro výukoové účely. Obsahuje minimální postačující soubor funkcí, aby začínající uživatel nebyl zahlcen.
//Community edition// je k dispozici zdarma, má méně funkcí než //professional//, ale pro účely tohoto předmětu je zcela dostačující. Pokud byste chtěli vyzkoušet i placenou verzi //professional//, můžete využít školní licenci, která dává možnost studentům a zaměstnancům ČVUT produkt využívat pro nekomerční účely. Licenci najdete na serveru [[http://download.cvut.cz]]. Po přihlášení ji najdete v nabídce pod položkami **Produkty dostupné studentům** > **JetBrains** > **PyCharm**.
===== Založení projektu v PyCharm =====
Používáte-li k vývoji v Pythonu prostředí PyCharm, doporučujeme vám vytvořit si pro řešení úlohy projekt. PyCharm tak bude schopen lépe analyzovat váš kód a udržovat stav vaší práce mezi jednotlivými sezeními.
Při vytváření projektu dejte pozor, abyste vybrali správnou verzi interpreteru Pythonu!
Tutoriály k vytváření projektů v PyCharm na stránkách JetBrains:
* [[https://www.jetbrains.com/pycharm/webhelp/creating-projects-from-scratch-in-pycharm.html|Vytváření projektů od nuly]]
* [[https://www.jetbrains.com/pycharm/webhelp/importing-project-from-existing-source-code.html|Vytvoření projektu z existujících zdrojových kódů]]
++++ Stručný postup: |
- Udělejte jednu z následujících věcí:
* Na uvítací obrazovce v sekci **Quick start** vyberte možnost **Create new project**.
* V nabídce **File** zvolte položku **New project**.
- V dialogu, který se objevil, vyplňte
* název projektu (**Project name**), např. "spam",
* adresář (**Location**), kde projekt chcete mít, např. "/skola/rph",
* typ projektu (**Project type**) nastavte na **Empty project** a
* uveďte cestu k vašemu interpretu Pythonu (**Interpreter**), pokud ji tam nemáte již vyplněnou. Dejte pozor na správnou verzi!
- Klikněte na **OK**, v následujícím okně vyberte, zda chcete projekt otevřít ve stávajícím nebo v novém okně a opět klikněte na **OK**. Tím by se měl vytvořit adresář projektu (v našem případě např. ''/skola/rph/spam'' a uvnitř něj další (skrytý) adresář ''.idea'', kam si PyCharm ukládá různá nastavení (ale s tímto adresářem byste prakticky neměli přijít do styku).
- Soubory do projektu můžete vložit v zásadě dvěma způsoby:
* Vytvoříte nový soubor uvnitř projektu, např.
* pomocí menu **File** > **New ...**, nebo
* volbou položky **New** z kontextového menu po kliknutí pravým tlačítkem na název projektu v nástroji **Project**.
* Existující soubory prostě nahrajete do adresáře projektu.
++++
/* - Stáhněte si {{:courses:a4b99rph:cviceni:spam:test1_readclassification.zip|testy ke kroku 1}} a {{:courses:a4b99rph:cviceni:spam:test2_corpus.zip|testy ke kroku 2}} a rozbalte je do adresáře projektu (přidejte je do projektu). Měli byste soubory s testy vidět v okně nástroje **Project**.
*/
===== Spouštění skriptů v PyCharm =====
Existuje celá řada možností, jak skript/program spustit. Každá se hodí na něco jiného, má své výhody a nevýhody.
==== Spouštění v Python shellu ====
++++ Spustí skript, jako byste jej řádek po řádku napsali do konzole Pythonu: |
- Otevřete skript v editoru.
- Označte celý text (**CTRL-A**).
- Klikněte pravým tlačítkem na výběr a z kontextové nabídky vyberte **Execute Selection in Console** (**Alt-Shift-E**).
Je samozřejmě možné postup provést jen pro část skriptu.
++++
==== Konfigurace pro běh a ladění ====
++++ Run/Debug Configurations: |
Skripty/programy/aplikace se v PyCharmu obvykle spouštějí pomocí nástroje **Run**, který lze vyvolat na mnoha místech PyCharmu. Nejdřív si ale pojďme říct, co vlastně znamená "spustit skript/program/aplikaci".
Zdrojové kódy vašeho projektu (ať už je to jediný soubor nebo tisíce souborů v mnoha adresářích) se dají "použít" v mnoha "módech". Typický jednoduchý skript v Pythonu bude obsahovat kód, dokumentaci ve formě komentářů a třeba doctesty (opět uvnitř komentářů). S takovým skriptem můžete chtít dělat různé věci:
* spustit ho (třeba s různými argumenty),
* spustit nástroj, který z dokumentace uvnitř komentářů vytvoří HTML nebo PDF dokumentaci,
* spustit doctesty, které se nacházejí uvnitř komentářů,
* ...
Pro každý takový "mód použití" vašeho projektu je třeba v PyCharmu nadefinovat vlastní konfiguraci pro běh a ladění (Run/Debug configuration), viz odkazy v rámečku níže.
Tutoriály k spouštění/ladění skriptů v PyCharm na stránkách JetBrains:
* [[https://www.jetbrains.com/pycharm/webhelp/creating-and-editing-run-debug-configurations.html|Vytváření a úpravy konfigurací pro běh a ladění]]
* [[https://www.jetbrains.com/pycharm/webhelp/creating-and-saving-temporary-run-debug-configurations.html|Vytváření a ukládání //dočasných// konfigurací pro běh a ladění]]
PyCharm se pro každý skript/soubor snaží odhadnout výchozí konfiguraci (která může a nemusí být tím, co se souborem skutečně chcete dělat). Pokud se PyCharmu jeho odhad nepovede, musíte konfiguraci změnit ručně, viz návody v rámečku.
Všechny dostupné konfigurace (výchozí i ručně specifikované) najdete v drop-down boxu v nástrojové liště (vedle zeleného tlačítka **Run**).
++++
==== Spouštění pomocí nástroje Run ====
++++ Skript spustí v nové instanci Pythonu: |
Možnost 1:
- V drop-down boxu vyberte příslušnou konfiguraci (budete-li ji používat opakovaně, tento krok znovu samozřejmě provádět nemusíte).
- Stiskněte zelené tlačítko **Run** (nebo použijte klávesovou zkratku **Shift-F10**).
Možnost 2:
- V menu **Run** zvolte položku **Run...** (**Alt-Shift-F10**).
- V následném okně vyberte konfiguraci, kterou chcete spustit.
++++
===== Spouštění testů v PyCharm =====
Opět existuje několik způsobů, jak testy spustit. Vyberte si ten, který vám nejvíc vyhovuje.
==== Spuštění testů z jednoho modulu v Python shellu ====
++++ Spustí testy v jednom modulu: |
Pokud chcete modul testovat tímto způsobem, je třeba mít přímo v kódu modulu zajištěno vykonání testů, tedy např:
if __name__=="__main__":
import doctest
doctest.testmod()
v případě doctestů, nebo
if __name__=="__main__":
import unittest
unittest.main()
v případě použití modulu ''unittest''. Postupujte jako v případě spuštění normálního skriptu, viz předchozí sekce (označte celý kód a nechte jej ohodnotit v Python konzoli).
++++
==== Spuštění testů jednoho modulu v nástroji Test ====
++++ Spustí testy v jednom modulu. |
- Otevřete modul s testy v editoru. PyCharm pravděpodobně správně odhalí, že soubor obsahuje unittesty a vytvoří výchozí konfiguraci.
- Proveďte jednu z následujících akci:
* Klikněte pravým tlačítkem na název souboru v okně **Project**. Z kontextové nabídky vyberte možnost **Run 'Unittests in ...'**
* V drop-down menu v nástrojové liště vyberte **Unittests in ...** a klikněte na zelené tlačítko **Run**.
* Z menu **Run** vyberte položku **Run ...** a vyberte konfiguraci **Unittest in ...**
- Výsledky testů byste měli vidět v přehledné stromové struktuře v okně nástroje Run.
Pokud PyCharm z nějakého důvodu nenabízí výchozí konfiguraci **Unittests in ...**, můžete si ji ručně nadefinovat, viz postup níže.
++++
2017-11-30: Dnes jsme zjistili, že v učebně 307 v PyCharm Community tato možnost nefunguje správně. Pokud narážíte na podobné problémy, zkuste si běhovou konfiguraci nadefinovat ručně (viz následující popis). Stačí použít **Target** Python s názvem testovaného modulu, např. **test_readClassificationFromFile**. Možnost s **Target** Path občas nefunguje.
==== Spuštění všech testů v adresáři (projektu) najednou v nástroji Test ====
++++ Spustí všechny testy. |
Pro tuto možnost je nutné nadefinovat si vlastní konfiguraci pro běh a ladění.
- V menu **Run** vyberte položku **Edit Configurations ...**.
- V otevřeném dialogovém okně **Run/Debug configurations** klikněte na tlačítko **zelené plus**.
- V nabídce, která se objeví, vyberte **Python tests** > **Unittests**. Vytvoří se prázdná konfigurace, kterou je třeba vyplnit v pravé části dialogu.
- Vložte jméno konfigurace do políčka **Name**, např. "All tests".
- Na záložce **Configuration**, ve skupině **Unittests**, vyberte pro položku **Target** možnost **Path**.
- V editačním poli pod **Target** vložte cestu k vašim souborům s testy, tedy např. "/skola/rph/spam".
- Do pole **Pattern** vložte vzor pro názvy souborů, v nichž se mají hledat testy, např. "test_*.*".
- Ostatní nastavení by nemělo být třeba měnit. Po kliknutí na **OK** by měla být konfigurace dokončena a připravena k použití.
- Spusťte konfiguraci. V okně s výsledky byste měli vidět, že se spustily testy ze všech souborů "test_*.py".
++++