Obsah
1. Kouzelné funkce vestavěné do IPythonu
2. Zobrazení historie zadaných příkazů
3. Uložení a obnova obsahu proměnných z diskového úložiště
4. Výpis proměnných, popř. jejich typů
5. Zjištění doby běhu určité funkce či části kódu
6. Spuštění vybrané funkce v profileru
7. Integrace IPythonu s debuggerem
8. Volání funkcí bez nutnosti psaní závorek
9. Přechod do jiného adresáře, výpis aktuálního adresáře
10. Zobrazení historie navštívených adresářů
11. Příkazy zapsané v odlišném jazyce, popř. jiné verze Pythonu
12. Přidání vlastní kouzelné funkce
13. Integrace IPythonu s Vimem
15. IPython a integrované vývojové prostředí Spyder
16. IPython a PuDB: spojení výkonného interaktivního prostředí se skvělým debuggerem
18. Nastavení IPythonu v debuggeru PuDB
19. Příloha: seznam standardních kouzelných funkcí IPythonu
1. Kouzelné funkce vestavěné do IPythonu
Ve druhém článku o IPythonu navážeme na článek úvodní. Zaměříme se na popis dalších užitečných magických funkcí nabízených tímto nástrojem. Popíšeme si i možnost přidání vlastních kouzelných funkcí (magic functions), využití dalších skriptovacích jazyků přímo z prostředí IPythonu a kombinaci IPythonu s programátorskými textovými editory, popř. s integrovanými vývojovými prostředími. Nezapomeneme ani na zmínku o integraci IPythonu do pokročilého debuggeru pudb, s nímž jsme se již na stránkách Roota seznámili v samostatném článku.
Obrázek 1: Prostředí IPythonu je založeno na konceptu takzvaných buněk (cells), k jejichž obsahu i vypočteným výsledkům je možné se v případě potřeby vrátit.
Již v předchozím článku jsme se seznámili s některými kouzelnými funkcemi IPythonu (magic functions). Připomeňme si ve stručnosti, o jakých funkcích jsme se bavili. Především se jednalo o funkce pojmenované %cpaste a %edit. Díky jejich existenci lze do prostředí IPythonu buď přenést celý blok přes schránku (bez snahy o jeho přeformátování), popř. spustit externí editor a upravit v něm zvolenou část kódu. Výběr textového editoru se provádí přes proměnné prostředí $EDITOR, popř. $VISUAL. V případě funkce %cpaste se vkládání ukončuje klávesovou zkratkou Ctrl+D. Kouzelná funkce %edit (lze ji vyvolat i přes klávesu F2) nám umožní spustit editor s možností úpravy vybraného objektu či vytvoření objektu nového. Pro načtení souboru se zdrojovými kódy se používá kouzelná funkce nazvaná %load. Pro opačnou operaci, tedy pro uložení obsahu vybraných buněk slouží kouzelná funkce se jménem %save. Té se předává jak jméno souboru, tak i buňky, které se do něho mají uložit.
Obrázek 2: Vestavěná nápověda IPythonu. Ta je pochopitelně k dispozici i pro všechny kouzelné funkce popisované v dnešním článku.
2. Zobrazení historie zadaných příkazů
První kouzelnou funkcí, s níž se v dnešním článku seznámíme, je funkce nazvaná %history (připomeňme si, že jména kouzelných funkcí začínají znakem procenta či v některých případech dvěma procenty). Funkce %history dokáže zobrazit historii dříve zadaných příkazů, přičemž přístup do historie je možný hned několika způsoby, typicky ovšem zadáním rozsahu:
Obrázek 3: Nápověda zobrazená ke kouzelné funkci %history.
Ukažme si nyní jedno z možných použití této funkce. Zobrazíme posledních dvacet příkazů, a to včetně čísel řádků (přepínač -n) a taktéž vlastních příkazů (přepínač -o):
In [63]: %history -n -o 1-20 1: os.*dir* 2: os.*dir*? 3: import os 4: os.*dir* 5: os.*dir*? 6: import os 7: os.*dir*? 8: os.chdir? 9: os.chdir? 10: os.chdir?? 11: ??os.chdir 12: ??os.chdir?? 13: import math 14: math.*? 15: math.*a? 16: math.*r? 17: math.*r*? 18: math.*rand*? 19: *rand*? 20: *rand*?
Užitečný je i přepínač -g, který nám umožňuje specifikovat vzorek (pattern), který je následně vyhledáván v historii příkazů. Vzorek ovšem v tomto případě není běžným regulárním výrazem, ale „globem“ využívaným například v shellu při specifikaci jmen souborů. Podporovány jsou tedy zejména žolíkové znaky „*“ a „?“. Podívejme se nyní na využití tohoto přepínače:
Obrázek 4: Několik běžných příkazů, které se zapíšou do historie IPythonu (pro aktivní sezení).
Obrázek 5: Výpis celé historie příkazů.
Obrázek 6: Výpis příkazů obsahujících řetězec „foobar“.
Obrázek 7: Výpis příkazů obsahujících vzorek „oo“ následovaný libovolnými znaky.
3. Uložení a obnova obsahu proměnných z diskového úložiště
Minule jsme se seznámili i s kouzelnou funkcí pojmenovanou %save, kterou je možné použít pro uložení zdrojového textu či jeho části (popř. i jednotlivých příkazů) do specifikovaného souboru. Existuje ovšem i možnost uložení obsahu vybraných proměnných, které tak dokážou „přežít“ ukončení IPythonu. Pro tento účel slouží magická funkce nazvaná %store, která slouží pro uložení vybraných (explicitně zapsaných) proměnných na disk. Po opětovném spuštění IPythonu se tyto proměnné mohou obnovit příkazem %store s přepínačem -r:
Obrázek 8: Nápověda zobrazená ke kouzelné funkci %history.
Opět si ukažme použití této velmi užitečné kouzelné funkce na jednoduchém příkladě:
Obrázek 9: Definice několika proměnných globálních v rámci aktuálního jmenného prostoru.
Obrázek 10: Explicitní uložení proměnných na disk kouzelnou funkcí %store.
Obrázek 11: Po opětovném startu IPythonu nejsou dříve uložené proměnné dostupné (začíná se tedy pracovat „na zelené louce“).
Obrázek 12: Načtení obsahu proměnných z disku – proměnné i jejich obsah (včetně typu) byly obnoveny.
$ ls -1 ~/.ipython/profile_default/db/autorestore/ a b c d e f g
4. Výpis proměnných, popř. jejich typů
Další dvě kouzelné funkce vestavěné do IPythonu, s nimiž se v dnešním článku ve stručnosti seznámíme, se jmenují %who a %whos. První z těchto funkcí vypíše obsah všech manuálně definovaných globálních proměnných, popř. proměnných, které odpovídají zadanému vzoru (viz též kouzelnou funkci %history zmíněnou výše):
Obrázek 13: Nápověda zobrazená ke kouzelné funkci %who.
Funkce %whos provádí podobnou činnost, ovšem s tím, rozdílem, že se o proměnných vypíše větší množství informací (typ i hodnotu):
Obrázek 14: Nápověda zobrazená ke kouzelné funkci %whos.
Základní použití těchto dvou funkcí je ukázáno na dvojici screenshotů:
Obrázek 15: Použití kouzelné funkce %whos.
Obrázek 16: Použití kouzelných funkcí %who a %whos v jiném sezení (session) s odlišnými proměnnými.
5. Zjištění doby běhu určité funkce či části kódu
Mnohdy je zapotřebí zjistit dobu trvání běhu nějaké Pythonovské funkce, popř. části kódu. K tomuto účelu je možné v IPythonu použít kouzelnou funkci nazvanou příznačně %timeit, která dokonce umožňuje opakované měření (což zlepší přesnost a eliminuje případný čas nutný pro „zahřátí“ daného kusu kódu):
Obrázek 17: Nápověda zobrazená ke kouzelné funkci %timeit.
Použití této magické funkce je ve skutečnosti velmi snadné, což je ostatně patrné i z následující čtveřice screenshotů s popisem prováděných operací:
Obrázek 18: Přenos zdrojového kódu funkce pro (dosti neefektivní) výpočet faktoriálu do prostředí IPythonu přes schránku s využitím již dříve popsané magické funkce %cpaste.
Obrázek 19: Změření doby výpočtu faktoriálu ze sedmi měření, z nichž každé výpočet spustilo 10000×.
Obrázek 20: Změna počtu spuštění měřené funkce pro každé ze sedmi měření.
Obrázek 21: Modifikovat je možné v případě potřeby i samotný počet měření (ve výchozím nastavení se provádí sedm měření).
6. Spuštění vybrané funkce v profileru
Kromě jednoduchého měření času lze vybranou funkci spustit v pythonovském profileru, a to konkrétně s využitím kouzelné funkce nazvané %prun (neboli profiler run). Výsledkem budou podrobnější informace o tom, jaké funkce byly v průběhu sledování a měření volány a co se v průběhu měření vlastně dělo (přístupy do databáze, čisté výpočty atd.):
Obrázek 22: Nápověda zobrazená ke kouzelné funkci %prun.
Ukázka výsledků získaných funkcí %prun při zavolání jednoduché funkce pro výpočet faktoriálu (která je rekurzivní a interně nevolá další funkce kromě vyhodnocování konstrukce assert):
Obrázek 23: Výsledky získané profilerem přes magickou funkci %prun.
Následuje další demonstrační příklad ukazující, která část funkce pro převod celočíselné hodnoty na římské číslice je časově nejsložitější (pro daný vstup):
In [2]: # %load roman_test.py ...: def roman(number): ...: return ( ...: (number * 'I') ...: .replace('IIIII', 'V') ...: .replace('IIII', 'IV') ...: .replace('VV', 'X') ...: .replace('VIV', 'IX') ...: .replace('XXXXX', 'L') ...: .replace('XXXX', 'XL') ...: .replace('LL', 'C') ...: .replace('LXL', 'XC') ...: .replace('CCCCC', 'D') ...: .replace('CCCC', 'CD') ...: .replace('DD', 'M') ...: .replace('DCD', 'CM') ...: ) ...: In [3]: %prun roman(999999) 16 function calls in 0.016 seconds Ordered by: internal time ncalls tottime percall cumtime percall filename:lineno(function) 12 0.015 0.001 0.015 0.001 {method 'replace' of 'str' objects} 1 0.001 0.001 0.016 0.016 <ipython-input-2-e61a7f8b7a92>:2(roman) 1 0.000 0.000 0.016 0.016 {built-in method builtins.exec} 1 0.000 0.000 0.016 0.016 <string>:1(<module>) 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
7. Integrace IPythonu s debuggerem
Přímo z prostředí IPythonu je možné volat i debugger. Výchozím podporovaným debuggerem je standardní pdb neboli „The Python Debugger“. Pro vyvolání debuggeru slouží kouzelná funkce %debug:
Obrázek 24: Nápověda zobrazená ke kouzelné funkci %debug.
Základní způsob použití tohoto příkazu si ukážeme na několika screenshotech:
Obrázek 25: Načtení funkce, kterou budeme ladit.
Obrázek 26: Spuštění pdb a zobrazení jeho nápovědy.
Obrázek 27: Základním příkazem je s neboli step, kterým lze krokovat laděnou funkcí.
Obrázek 28: Zobrazení hodnoty parametru n.
Obrázek 29: Příkazem ll se zobrazí právě laděná funkce nebo metoda se zvýrazněním aktuálního řádku.
8. Volání funkcí bez nutnosti psaní závorek
Další potenciálně užitečná magická funkce se jmenuje %autocall. Jedná se o funkci akceptující jeden parametr, který určuje, v jakém případě bude nutné okolo parametrů volaných (běžných) funkcí psát kulaté závorky:
%autocall x | Význam |
---|---|
0 | závorky bude nutné psát, jako v běžném Pythonu |
1 | prázdné závorky bude nutné psát u funkce bez parametrů |
2 | závorky nebude nutné psát |
Obrázek 30: Nápověda zobrazená k magické funkci %autocall.
Opět si ukažme příklad použití:
Obrázek 31: Použití %autocall 2 (zavolají se i funkce bez parametrů).
Obrázek 32: Použití %autocall 1 (funkce bez parametrů je nutné volat tak, jako v Pythonu).
9. Přechod do jiného adresáře, výpis aktuálního adresáře
Při práci na větším projektu není neobvyklé, že je nutné přecházet mezi různými adresáři – přitom vždy jeden adresář je aktivní (pracovní). Pro přechod mezi adresáři slouží magická funkce %cd, jejíž základní použití je podobné obdobně pojmenovanému příkazu shellu:
Obrázek 33: Nápověda zobrazená k magické funkci %cd.
Pracovní, tedy aktivní adresář se, opět podobně jako v shellu, vypíše magickou funkcí pojmenovanou %pwd neboli print working directory:
Obrázek 34: Nápověda zobrazená k magické funkci %pwd.
U funkce %cd lze pochopitelně použít klávesu Tab zobrazující menu s nabídkou dostupných adresářů. Dále je možné se vrátit do předchozího adresáře příkazem %cd -. Navštívené adresáře se totiž zapisují do seznamu s historií:
Obrázek 35: Nabídka adresáře po stisku klávesy Tab.
Obrázek 36: Některé možnosti nabízené magickými funkcemi %cd a %pwd.
10. Zobrazení historie navštívených adresářů
Jak jsme si již řekli v předchozí kapitole, uchovává si IPython historii navštívených adresářů, ke které je možné se později vrátit. K zobrazení této historie slouží magická funkce %dhist, která dokáže zobrazit jak celou historii (pokud nejsou uvedeny žádné další parametry) či pouze vybranou část historie:
Obrázek 37: Nápověda zobrazená k magické funkci %dhist.
Použití této kouzelné funkce je ve skutečnosti velmi jednoduché:
Obrázek 38: Zobrazení historie navštívených adresářů.
11. Příkazy zapsané v odlišném jazyce, popř. jiné verze Pythonu
IPython podporuje, což je poněkud zvláštní, spuštění příkazů zapsaných v odlišném programovacím jazyce, popř. v jiné verzi Pythonu. Tyto příkazy je ovšem nutné zapisovat s využitím příslušné kouzelné funkce, která musí začínat znaky %%. Dvojicí procent začínají ty magické funkce, které akceptují víceřádkový vstup, takže je zřejmé, že lze tvořit a zapisovat i složitější jazykové konstrukce, popř. definice. Příkazy se ukončují stiskem klávesové zkratky Ctrl+D Enter. Pochopitelně si opět ukážeme několik příkladů.
Použití Pythonu 2, i když samotný IPython je založen na Pythonu 3:
In [40]: %%python2 ...: a = 42 ...: print a ...: (Ctrl+D) ...: (Enter) 42
Volání více příkazů BASHe:
In [45]: %%bash ...: pwd ...: ls ...: (Ctrl+D) ...: (Enter) /home/ptisnovs/src/python baf.py fuzzer.py most-popular-python-libs pipenv.htm python_dotenv.htm python-programming-courses python-schema-checks repos roman.py roman_test.py spellcheck.py svitava-gui test_anim.py testing-in-python xrepos
Spuštění části kódu zapsaného v Perlu:
In [49]: %%perl ...: $a=42; ...: print $a; ...: (Ctrl+D) ...: (Enter) 42
12. Přidání vlastní kouzelné funkce
Do prostředí IPythonu je možné přidat i vlastní kouzelné funkce. Pojďme si nyní ve stručnosti ukázat, jak se tato operace provádí. Nejprve je nutné naimportovat dekorátor nazvaný register_line_magic, popř. register_cell_magic podle toho, zda se má nová magická funkce aplikovat na jediný vstupní řádek, nebo na celou několikařádkovou buňku. Pokud se bude jednat o magickou funkci pro jediný vstupní řádek, zapíšeme:
In [54]: from IPython.core.magic import register_line_magic
Dalším krokem je vytvoření libovolné funkce, u které bude tento dekorátor použit:
In [5]: @register_line_magic ...: def magic_function(line): ...: return line.upper()
Použití takto vytvořené magické funkce:
In [6]: %magic_function foobar Out[6]: 'FOOBAR'
In [15]: @register_line_magic ...: def x2(line): ...: params = line.split(" ") ...: return params[0] + "/" + params[1] ...: In [16]: %x2 foo bar Out[16]: 'foo/bar'
Obrázek 39: Zobrazení dokumentace a současně i zdrojového kódu uživatelem definované funkce.
13. Integrace IPythonu s Vimem
IPython je možné relativně snadno integrovat s textovým editorem Vim. V současnosti existuje dokonce několik pluginů pro Vim, které tuto integraci zajišťují. Starší a dnes již dále nevyvíjený plugin se jmenuje vim-python, ovšem pro nové verze IPythonu je doporučováno použít spíše plugin pojmenovaný Jupyter-Vim (což je poněkud matoucí jméno, pokud si ovšem neuvědomíme, že v projektu Jupyter je základním kernelem právě IPython). Použití tohoto pluginu bude podrobněji ukázáno v samostatném článku, ovšem v kontextu dnešního textu bylo vhodné alespoň upozornit na existenci tohoto přídavného modulu.
14. IPython v PyDev
Další možnost integrace IPythonu souvisí s vývojovým prostředím nazvaným PyDev. Toto IDE je ve skutečnosti modulem určeným pro integraci do univerzálního prostředí Eclipse. Vývoj projektu Eclipse byl zahájen na přelomu tisíciletí ve společnosti IBM a v současnosti se jedná o aplikaci šířenou pod licencí EPL. EPL je licence v některých ohledech poněkud odlišná od známé GNU GPL, to však nijak neovlivňuje možnosti použití Eclipse ve funkci IDE v Linuxu. Ostatně i z tohoto důvodu najdeme Eclipse i v základních balíčcích Fedory, což by v případě problematičtějšího licenčního modelu pochopitelně nebylo možné. V případě Eclipse se původně mělo jednat o integrované vývojové prostředí (IDE), které mělo představovat alternativu k tehdy již existujícímu prostředí Visual Age založenému na programovacím jazyku Smalltalk (toto prostředí je nicméně stále používáno a existuje okolo něj loajální, i když asi dnes již dosti malá komunita), později se z Eclipse stala univerzální platforma používaná jak ve funkci integrovaného vývojového prostředí, tak i ve funkci takzvaného „rich clienta“. A právě tuto schopnost Eclipse využili (kromě mnoha jiných programátorů) i vývojáři prostředí PyDev.
Obrázek 40: Ladění programu napsaného v Pythonu s využitím možností, které vývojářům poskytuje integrované vývojové prostředí PyDev.
V PyDevu jsou k dispozici dvě hlavní perspektivy (layout oken) nazvané PyDev a Debug. Tyto perspektivy se někdy přepínají automaticky, například při ladění aplikace, ovšem přepnutí je možné provést i ručně, a to výběrem perspektivy v pravém horním rohu grafického uživatelského rozhraní vývojového prostředí Eclipse. Kromě perspektiv si lze prakticky kdykoli nechat zobrazit další podokna se speciálním obsahem a významem. Tato podokna se nazývají views a v případě použití PyDev je možné použít například pohled na strukturu projektu (Outline), výsledky běhu jednotkových testů (PyUnit), výsledky zjištění pokrytí kódu testy (Code Coverage), seznam problémů nalezených v projektu (Problems) či seznam TODO zapsaných do zdrojových kódů (Tasks). Mezi pohledy patří i konzole (Console) zobrazující standardní i chybový výstup. Se všemi těmito okny lze manipulovat, tj. přemisťovat je, „vytáhnout“ je mimo hlavní okno Eclipse apod.
Obrázek 41: Dialog pro vytvoření nového projektu. Můžete zde vidět volbu interpretru (verzi i typ). PyDev v této oblasti vývojáře neomezuje (tj. například je k dispozici i starodávný Python 2.x), samozřejmě však musí mít vybraný interpret nainstalován ve svém systému.
PyDev obsahuje i integrovanou konzoli s interpretrem Pythonu. Do této konzole je možné se přepnout klávesovou zkratkou Ctrl+Alt+Enter, která dokáže přenést vybraný text do konzole a spustit ho. Pokud je cesta k IPythonu součástí proměnné prostředí PYTHONPATH, bude v konzoli použit právě IPython. Integrace je přitom obousměrná, protože pokud v konzoli použijeme kouzelnou funkci %edit nebo klávesovou zkratku F2 (viz předchozí článek), otevře se okno editoru přímo v prostředí PyDev (resp. Eclipse).
Obrázek 42: Nastavení konzole v PyDev.
15. IPython a integrované vývojové prostředí Spyder
IPython je možné využívat i z integrovaného vývojového prostředí Spyder, které je orientováno přímo na vývoj aplikací v Pythonu s využitím dalších podpůrných projektů (pyflakes, pylint, pycodestyle, Jedi atd.). Spyder umožňuje, ostatně podobně jako výše zmíněné prostředí PyDev, zobrazit konzoli s interpretrem Pythonu, která je realizována právě s využitím IPythonu (resp. přesněji řečeno těchto konzolí může být otevřené prakticky libovolné množství). Podrobnější popis integrace IPythonu do Spyderu je popsán na této stránce.
16. IPython a PuDB: spojení výkonného interaktivního prostředí se skvělým debuggerem
IPython je možné integrovat i do samostatně spustitelného debuggeru nazvaného PuDB, o němž již na stránkách Rootu vyšel samostatný článek. Tento debugger ve výchozím nastavení používá standardní interaktivní smyčku (REPL) jazyka Python, ovšem v případě potřeby je možné provést přepnutí na IPython. Ovšem v tomto případě je integrace odlišná od integrace IPythonu s debuggerem pdb, kterou jsme si ve stručnosti popsali v sedmé kapitole. Zatímco pdb byl volán z prostředí IPythonu, v případě PuDB je tomu přesně naopak – IPython se volá v případě potřeby z debuggeru. Podrobnosti budou popsány v navazujících dvou kapitolách.
Obrázek xx: Zobrazení rekurzivní datové struktury, v tomto případě slovníku s dalšími slovníky, v debuggeru PuDB.
17. Základní informace o PuDB
V článcích Grafická nadstavba nad GNU Debuggerem gdbgui a její alternativy a Trasování a ladění nativních aplikací v Linuxu: použití GDB a jeho nadstaveb jsme se seznámili jak s GNU debuggerem (známým i pod zkratkou GDB nebo gdb), tak i s dalšími debuggery dostupnými v Linuxu. Kromě toho jsme si ukázali i některé nadstavby vytvořené nad GNU debuggerem. Dále jsme si v dalším článku, tentokrát s titulkem Užitečné skripty a pluginy pro textový editor Vim: propojení Vimu s debuggery ukázali, jak je možné nakonfigurovat známý a oblíbený textový editor Vim takovým způsobem, aby ho bylo možné použít jako frontend (tedy ve funkci uživatelského rozhraní) pro různé typy debuggerů určených jak pro ladění aplikací naprogramovaných v céčku, popř. C++ či aplikací vytvořených v Pythonu.
Obrázek xx: Typické „sezení“ programátora využívajícího debugger gdb. Nastavení breakpointu příkazem b main, spuštění laděného programu příkazem r a krokování příkazem n (klávesa Enter zopakuje poslední zadaný příkaz, proto je n vlastně v tomto příkladu používán nadbytečně).
Pro aplikace naprogramované v Pythonu však existuje ještě jeden zajímavý a poměrně snadno ovladatelný debugger, který pro komunikaci s programátory používá plnohodnotné (celoobrazovkové) textové uživatelské rozhraní (TUI – Text-Based User Interface). Tento debugger se jmenuje PuDB a jeho uživatelské rozhraní je do značné míry inspirováno slavným Turbo Debuggerem, který si možná někteří čtenáři pamatují ze stařičkého DOSu i z Microsoft Windows (Turbo Debugger ovšem pochopitelně nebyl určen pro Python, ale pro aplikace naprogramované v Turbo/Borland Pascalu, Turbo C a později i Turbo C++). Dnes se seznámíme s možnostmi, které nám PuDB nabízí a pokusíme se tyto možnosti porovnat s dalšími debuggery dostupnými pro Python.
Obrázek xx: Aplikace gdbtui nabízí „alternativní“ celoobrazovkové ovládání debuggeru.
Instalace debuggeru PuDB je snadná, protože balíček s tímto nástrojem je dostupný na PyPi. Pro jeho instalaci tedy postačuje využít instalátor pip, popř. pip3 a provést buď instalaci pro všechny uživatele:
$ pip3 install pudb
nebo instalaci pro právě aktivního uživatele:
$ pip3 install --user pudb
Debugger PuDB vyžaduje kupodivu instalaci pouze dvou závislostí, především knihovny urwid sloužící pro tvorbu aplikací s celoobrazovkovým textovým uživatelským rozhraním a taktéž knihovny nazvané Pygments, která je používána pro zobrazování syntaxe zdrojových kódů či konfiguračních souborů. Celá instalace by měla proběhnout prakticky okamžitě:
Downloading/unpacking pudb Downloading pudb-2018.1.tar.gz (56kB): 56kB downloaded Running setup.py (path:/tmp/pip_build_tester/pudb/setup.py) egg_info for package pudb /usr/lib/python3.4/distutils/dist.py:260: UserWarning: Unknown distribution option: 'test_requires' warnings.warn(msg) Requirement already satisfied (use --upgrade to upgrade): urwid>=1.1.1 in ./.local/lib/python3.4/site-packages (from pudb) Requirement already satisfied (use --upgrade to upgrade): pygments>=1.0 in ./.local/lib/python3.4/site-packages (from pudb) Installing collected packages: pudb Running setup.py install for pudb /usr/lib/python3.4/distutils/dist.py:260: UserWarning: Unknown distribution option: 'test_requires' warnings.warn(msg) Installing pudb3 script to /home/tester/.local/bin Successfully installed pudb Cleaning up...
V případě lokální instalace bude spustitelný skript pudb nebo pudb3 dostupný v adresáři:
~/.local/bin
Obrázek xx: Zpráva zobrazená při prvním spuštění debuggeru.
18. Nastavení IPythonu v debuggeru PuDB
Nastavení IPythonu v debuggeru PuDB je ve skutečnosti velmi snadné. Nejdříve je nutné debugger spustit, tj. v typickém případě mu na příkazovém řádku předat jméno souboru s laděnou funkcí nebo metodou. Následně se stiskem klávesové zkratky Ctrl+P otevře panel „preferences“, v němž se kromě dalších nastavení zobrazuje i výběr shellu pro Python. Vybraný shell se spustí klávesovou zkratkou ! (a to i v průběhu ladění atd.):
Obrázek XX: PuDB po spuštění (s nastaveným barvovým schématem odvozeným od Vimu).
Obrázek XX: Po stisku klávesové zkratky Ctrl+P lze zvolit, jaký shell se bude spouštět. PuDB zobrazuje nabídku všech podporovaných shellů, bez ohledu na to, zda jsou skutečně nainstalovány!
Obrázek XX: Po stisku klávesy ! se spustí zvolený shell.
19. Příloha: seznam standardních kouzelných funkcí IPythonu
V následující tabulce jsou vypsány standardní kouzelné funkce IPythonu, které pracují s jediným vstupním řádkem, nikoli tedy s celou několikařádkovou buňkou:
# | Kouzelná funkce |
---|---|
1 | %alias |
2 | %alias_magic |
3 | %autoawait |
4 | %autocall |
5 | %autoindent |
6 | %automagic |
7 | %bookmark |
8 | %cat |
9 | %cd |
10 | %clear |
11 | %colors |
12 | %conda |
13 | %config |
14 | %cp |
15 | %cpaste |
16 | %debug |
17 | %dhist |
18 | %dirs |
19 | %doctest_mode |
20 | %ed |
21 | %edit |
22 | %env |
23 | %gui |
24 | %hist |
25 | %history |
26 | %killbgscripts |
27 | %ldir |
28 | %less |
29 | %lf |
30 | %lk |
31 | %ll |
32 | %load |
33 | %load_ext |
34 | %loadpy |
35 | %logoff |
36 | %logon |
37 | %logstart |
38 | %logstate |
39 | %logstop |
40 | %ls |
41 | %lsmagic |
42 | %lx |
43 | %macro |
44 | %magic |
45 | %man |
46 | %matplotlib |
47 | %mkdir |
48 | %more |
49 | %mv |
50 | %notebook |
51 | %page |
52 | %paste |
53 | %pastebin |
54 | %pdb |
55 | %pdef |
56 | %pdoc |
57 | %pfile |
58 | %pinfo |
59 | %pinfo2 |
60 | %pip |
61 | %popd |
62 | %pprint |
63 | %precision |
64 | %prun |
65 | %psearch |
66 | %psource |
67 | %pushd |
68 | %pwd |
69 | %pycat |
70 | %pylab |
71 | %quickref |
72 | %recall |
73 | %rehashx |
74 | %reload_ext |
75 | %rep |
76 | %rerun |
77 | %reset |
78 | %reset_selective |
79 | %rm |
80 | %rmdir |
81 | %run |
82 | %save |
83 | %sc |
84 | %set_env |
85 | %store |
86 | %sx |
87 | %system |
88 | %tb |
89 | %time |
90 | %timeit |
91 | %unalias |
92 | %unload_ext |
93 | %who |
94 | %who_ls |
95 | %whos |
96 | %xdel |
97 | %xmode |
Samozřejmě jsou k dispozici i magické funkce určené pro zpracování celé buňky, jejíž obsah může přesáhnout několik řádků a typicky obsahuje blok kódu (celou funkci atd.):
# | Kouzelná funkce |
---|---|
1 | %%! |
2 | %%HTML |
3 | %%SVG |
4 | %%bash |
5 | %%capture |
6 | %%debug |
7 | %%file |
8 | %%html |
9 | %%javascript |
10 | %%js |
11 | %%latex |
12 | %%markdown |
13 | %%perl |
14 | %%prun |
15 | %%pypy |
16 | %%python |
17 | %%python2 |
18 | %%python3 |
19 | %%ruby |
20 | %%script |
21 | %%sh |
22 | %%svg |
23 | %%sx |
24 | %%system |
25 | %%time |
26 | %%timeit |
27 | %%writefile |
20. Odkazy na Internetu
- Use IPython REPL in VS Code
https://stackoverflow.com/questions/52310689/use-ipython-repl-in-vs-code - IPython for VSCode
https://marketplace.visualstudio.com/items?itemName=pancho111203.vscode-ipython - Domovská stránka projektu IPython
https://ipython.org/ - IPython (Wikipedia)
https://en.wikipedia.org/wiki/IPython - Projekt IPython na PyPi
https://pypi.org/project/ipython/ - Dokumentace k IPythonu
http://ipython.org/documentation.html# - IPython Documentation (na ReadTheDocs)
https://ipython.readthedocs.io/en/stable/ - IPython Tutorial
http://ipython.readthedocs.org/en/stable/interactive/tutorial.html - IPython Tips & Tricks
https://ipython.readthedocs.io/en/stable/interactive/tips.html - IPython cookbook
https://github.com/ipython/ipython/wiki?path=Cookbook - Cookbook: Index
https://github.com/ipython/ipython/wiki/Cookbook%3A-Index - Projects using IPython
https://github.com/ipython/ipython/wiki/Projects-using-IPython - Sebastian Witowski – Wait, IPython can do that?!
https://www.youtube.com/watch?v=3i6db5zX3Rw - vim-ipython
https://github.com/ivanov/vim-ipython - IPython Frequently asked questions
https://github.com/ipython/ipython/wiki/Frequently-asked-questions - What is REPL?
https://pythonprogramminglanguage.com/repl/ - What is a REPL?
https://codewith.mu/en/tutorials/1.0/repl - Programming at the REPL: Introduction
https://clojure.org/guides/repl/introduction - What is REPL? (Quora)
https://www.quora.com/What-is-REPL - Gorilla REPL: interaktivní prostředí pro programovací jazyk Clojure
https://www.root.cz/clanky/gorilla-repl-interaktivni-prostredi-pro-programovaci-jazyk-clojure/ - Read-eval-print loop (Wikipedia)
https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop - Domovská stránka programovacího jazyka Python
https://www.python.org/ - Domovská stránka projektu bpython
https://bpython-interpreter.org/ - Projekt bpython na PyPi
https://pypi.org/project/bpython/ - Git repositář projektu bpython
https://github.com/bpython/bpython - Projekt ptpython na PyPi
https://pypi.org/project/ptpython/ - Git repositář projektu ptpython
https://github.com/prompt-toolkit/ptpython - Domovská stránka projektu DreamPie
http://www.dreampie.org/ - Projekt DreamPie na PyPi
https://pypi.org/project/dreampie/ - Git repositář projektu DreamPie
https://github.com/noamraph/dreampie - Integrovaná vývojová prostředí ve Fedoře: IPython a IPython Notebook
http://mojefedora.cz/integrovana-vyvojova-prostredi-ve-fedore-ipython-a-ipython-notebook/ - Integrovaná vývojová prostředí ve Fedoře: praktické použití IPython Notebooku a knihovny Numpy
http://mojefedora.cz/integrovana-vyvojova-prostredi-ve-fedore-prakticke-pouziti-ipython-notebooku-a-knihovny-numpy/ - Integrovaná vývojová prostředí ve Fedoře: praktické použití IPython Notebooku a knihovny Numpy (2.část)
http://mojefedora.cz/integrovana-vyvojova-prostredi-ve-fedore-prakticke-pouziti-ipython-notebooku-a-knihovny-numpy-2-cast/ - Integrovaná vývojová prostředí ve Fedoře: vykreslování grafů s využitím knihoven Numpy a matplotlib
http://mojefedora.cz/integrovana-vyvojova-prostredi-ve-fedore-vykreslovani-grafu-s-vyuzitim-knihoven-numpy-a-matplotlib/ - Integrovaná vývojová prostředí ve Fedoře: vykreslování grafů s využitím knihoven Numpy a matplotlib (2.část)
http://mojefedora.cz/integrovana-vyvojova-prostredi-ve-fedore-vykreslovani-grafu-s-vyuzitim-knihoven-numpy-a-matplotlib-2-cast/ - Is IPython Notebook ever used as an IDE, or merely for presentations?
https://www.reddit.com/r/IPython/comments/1uk7hp/is_ipython_notebook_ever_used_as_an_ide_or_merely/ - The IDE as a Bad Programming Language Enabler
https://dzone.com/articles/ide-bad-programming-language - Enhanced Interactive Python with IPython
http://www.onlamp.com/pub/a/python/2005/01/27/ipython.html - Příkazový řádek – přítel nejvěrnější
https://www.root.cz/clanky/prikazovy-radek-pritel-nejvernejsi/ - Příkazový řádek – přítel nejvěrnější (2)
https://www.root.cz/clanky/prikazovy-radek-pritel-nejvernejsi-2/ - Picking a Python Interpreter (3 vs 2)
https://docs.python-guide.org/starting/which-python/ - Využití knihovny Pygments (nejenom) pro obarvení zdrojových kódů
https://www.root.cz/clanky/vyuziti-knihovny-pygments-nejenom-pro-obarveni-zdrojovych-kodu/ - Využití knihovny Pygments (nejenom) pro obarvení zdrojových kódů: vlastní filtry a lexery
https://www.root.cz/clanky/vyuziti-knihovny-pygments-nejenom-pro-obarveni-zdrojovych-kodu-vlastni-filtry-a-lexery/ - Knihovna Jedi: doplňování kódu a statická analýza kódu v Pythonu
https://www.root.cz/clanky/knihovna-jedi-doplnovani-kodu-a-staticka-analyza-kodu-v-pythonu/ - Knihovna Jedi: doplňování kódu a statická analýza kódu v Pythonu (dokončení)
https://www.root.cz/clanky/knihovna-jedi-doplnovani-kodu-a-staticka-analyza-kodu-v-pythonu-dokonceni/ - Pygments – Python syntax highlighter
http://pygments.org/ - Pygments (dokumentace)
http://pygments.org/docs/ - Write your own lexer
http://pygments.org/docs/lexerdevelopment/ - Jazyky podporované knihovnou Pygments
http://pygments.org/languages/ - Pygments FAQ
http://pygments.org/faq/ - Pygments 2.2.0 (na PyPi)
https://pypi.org/project/Pygments/ - Syntax highlighting
https://en.wikipedia.org/wiki/Syntax_highlighting - Jedi – an awesome autocompletion/static analysis library for Python
https://jedi.readthedocs.io/en/latest/index.html - Jedi API Overview
https://jedi.readthedocs.io/en/latest/docs/api.html - jedi-vim
https://github.com/davidhalter/jedi-vim - Tvorba textového rozhraní s knihovnou prompt_toolkit: základní prvky TUI
https://www.root.cz/clanky/tvorba-textoveho-rozhrani-s-knihovnou-prompt-toolkit-zakladni-prvky-tui/ - Tvorba TUI s knihovnou prompt_toolkit: aplikace s celoobrazovkovým rozhraním
https://www.root.cz/clanky/tvorba-tui-s-knihovnou-prompt-toolkit-aplikace-s-celoobrazovkovym-rozhranim/ - Tvorba textového uživatelského rozhraní s knihovnou prompt_toolkit: ovládací prvky (widgety)
https://www.root.cz/clanky/tvorba-textoveho-uzivatelskeho-rozhrani-s-knihovnou-prompt-toolkit-ovladaci-prvky-widgety/ - ØMQ: knihovna pro asynchronní předávání zpráv
https://www.root.cz/clanky/0mq-knihovna-pro-asynchronni-predavani-zprav/ - Další možnosti poskytované knihovnou ØMQ
https://www.root.cz/clanky/dalsi-moznosti-poskytovane-knihovnou-mq/ - What is the difference between Jupyter and IPython Notebook?
https://www.quora.com/What-is-the-difference-between-Jupyter-and-IPython-Notebook - Jupyter kernels
https://github.com/jupyter/jupyter/wiki/Jupyter-kernels - Keyboard Shortcuts in the IPython Shell
https://jakevdp.github.io/PythonDataScienceHandbook/01.02-shell-keyboard-shortcuts.html - New terminal interface
https://ipython.readthedocs.io/en/stable/whatsnew/version5.html#new-terminal-interface - prompt-toolkit
https://python-prompt-toolkit.readthedocs.io/en/stable/ - Tvorba aplikací s příkazovým řádkem v Pythonu s knihovnami GNU Readline a prompt_toolkit
https://www.root.cz/clanky/tvorba-aplikaci-s-prikazovym-radkem-v-pythonu-s-vyuzitim-knihoven-gnu-readline-a-prompt-toolkit/ - Tvorba aplikací s textovým uživatelským rozhraním založeným na knihovně prompt_toolkit
https://www.root.cz/clanky/tvorba-aplikaci-s-textovym-uzivatelskym-rozhranim-zalozenym-na-knihovne-prompt-toolkit/ - Tvorba textového rozhraní s knihovnou prompt_toolkit: základní prvky TUI
https://www.root.cz/clanky/tvorba-textoveho-rozhrani-s-knihovnou-prompt-toolkit-zakladni-prvky-tui/ - Tvorba TUI s knihovnou prompt_toolkit: aplikace s celoobrazovkovým rozhraním
https://www.root.cz/clanky/tvorba-tui-s-knihovnou-prompt-toolkit-aplikace-s-celoobrazovkovym-rozhranim/ - pdb — The Python Debugger
https://docs.python.org/3/library/pdb.html - 12 Best Python IDEs and Code Editors in 2021
https://www.softwaretestinghelp.com/python-ide-code-editors/ - Interactive console in PyDev
https://www.pydev.org/manual_adv_interactive_console.html - vim-ipython
https://github.com/ivanov/vim-ipython - jupyter-vim
https://github.com/jupyter-vim/jupyter-vim