V tomto článku vám představím vývojové prostředí Spyder, které se snaží o vytvoření kvalitního editoru pro programovací jazyk Python. Ačkoliv toto prostředí není nijak extra známé (na rozdíl od např. slavného Eclipse + PyDev), věřím, že dokáže mnohým lidem hodně nabídnout. V následujícím textu popíši, jak Spyder vypadá a co všechno umí. Celý článek je psán na Fedoře 16; pokud používáte starší verzi Fedory (nebo úplně jiný systém), tak může Spyder vypadat a chovat se trochu jinak.

Instalace

Spyder je ve Fedoře zabalíčkován, takže instalace je jednoduchá – buď použijte systémové klikátko (v GNOME se jmenuje „Přidat/Odebrat software“) a vyhledejte balíček spyder, nebo tentýž balíček nainstalujte z terminálu (jako root):

# yum install spyder

Další způsoby instalace jsou popsány na wiki projektu. Při instalaci z balíčku pak Spyder najdete v nabídce aplikací pod stejnojmenným názvem, případně lze spustit příkazem spyder.

První pohled

Na následujícím obrázku vidíte, jak zhruba vypadá Spyder, když v něm otevřu jeden ze svých menších projektů.

Obrázek #1: Vývojové prostředí Spyder

To, co odlišuje vývojové prostředí od běžného editoru, je integrace mnoha nástrojů, které se vám hodí při vývoji, do jednoho celku. Spyder se snaží zahrnout vše důležité:

  • Editor zdrojového kódu – Samozřejmostí je editor právě otevřených souborů s přepínáním pomocí karet. Soubory Pythonu mají zvýrazněnou syntaxi, barevné schéma si můžete nadefinovat i vlastní. Velmi hezkou vlastností, která mi v mnoha jiných editorech chybí, je automatické zvýrazňování slova, na kterém máte zrovna kurzor. To se v rámci celého souboru vysvítí žlutě jak přímo v editoru, tak na pravé postranní liště. Máte tak snadno rychlý přehled, kde všude se vámi označená proměnná používá.

    Obrázek #2: Zvýrazňování slov v editoru

    Další krásnou vlastností je dynamická analýza kódu a zvýrazňování potenciálních problémů (k tomu se využívá nástroj pyflakes). Často díky tomu odhalíte překlepy v názvu proměnných nebo chybějící či přebývající importy.

    Obrázek #3: Dynamická analýza problémů v kódu

    Nejdůležitější vlastnosti editoru uzavírá nabídka doplňování kódu, která se automaticky vyvolává při přístupu k atributům objektu pomocí tečky, nebo manuálně pomocí zkratky Ctrl+Mezera. Doplňovat lze jak názvy lokálně nadefinovaných proměnných a metod, tak volání metod na naimportovaných modulech a jejich objektech. Ne vždy dokáže Spyder inteligentně určit typ vašeho objektu (v dynamicky typovaném Pythonu to ani není možné), ale u snazších případů se mu to daří na jedničku a vám to ušetří mnoho práce (a paměťové kapacity vašeho mozku).

    S touto funkcionalitou souvisí ještě podobná, a to je přechod k definici objektu. Vyvolává se zkratkou Ctrl+kliknutí na objekt. Spyder se pokusí přesunout k prvotní definici proměnné či funkce. Pokud je objekt nadefinován v jiném modulu, pokusí se otevřít tento externí modul (pokud není zrovna součástí standardní knihovny, která je kompilovaná v jazyce C).

    Obrázek #4: Nabídka dostupných atributů a metod v objektu

    V rychlosti ještě zmíním některé další (často automaticky předpokládané) vlastnosti: odsazování bloku textu doprava/doleva, zakomentování kusu kódu, hledání a hromadné nahrazování textu, vracení změn, odstraňování přebytečných bílých znaků (možno i automaticky při ukládání), konverze znaků konce řádky, rozštěpení okna (takže můžete jiný nebo i stejný soubor upravovat ve více oknech vedle sebe).

  • Outline – Tato osnova zobrazuje náhled na aktuálně otevřený soubor (vizte obrázek #1). Funguje trochu jinak, než na co jsem zvyklý u jiných prostředí – tady se zobrazují libovolné bloky kódu. Takže třídy, metody, ale i bloky cyklů a podmínek, bloky ošetřující výjimky a podobně. Třídy a metody mají zvýrazňující ikonku. Posloupnost je stejná jako u reálného kódu v souboru. To osobně vnímám jako menší nevýhodu, protože bych mnohem raději viděl seznam metod ve třídě v abecedním pořadí; tak se snadněji něco hledá.

  • Object inspector – Zobrazuje náhled na dokumentaci („docstring“) vybraného objektu (třídy, metody, modulu). Toto velice pomáhá rychlému psaní kódu, protože pro každou metodu, kterou voláte (zapíšete otevírací závorku, případně na jejím jméně stisknete Ctrl+I) se vám zobrazí její definice s povinnými a nepovinnými argumenty a její popis. Pomocí nabídky Options lze zobrazit i její zdrojový kód (pokud je implementována v Pythonu).

    Obrázek #5: Dokumentace vybrané metody

    Obrázek #6: Zobrazení zdrojového kódu vybrané metody

  • Online help – Náhled na automaticky generovanou dokumentaci pro všechny moduly nástrojem pydoc. Obsahem jsou běžné HTML stránky, které byste si normálně zobrazovali ve webovém prohlížeči, ale tady to máte více na dosah.

    Obrázek #7: Dokumentace modulů pomocí pydoc

  • Project explorer – Stromový náhled na vaše projekty a jejich soubory (vizte obrázek #1). Zde si můžete vytvořit seznam používaných projektů a vidět je všechny na stejné úrovni, i když jsou ve skutečnosti rozmístěny v různě zanořených adresářích na disku. V kontextové nabídce u každého projektu si můžete ještě spustit editor cest, kde si můžete do proměnné PYTHONPATH (vztahující se pouze k vybranému projektu) přidat cesty k dodatečným knihovnám. Dále je k dispozici extrémně jednoduché ovládání verzovacího systému (v mém případě git), které však stejně spouští pouze další externí nástroj.

  • Variable explorer – Zde máte vypsány všechny globální proměnné a jejich hodnoty právě běžícího procesu v konzoli (vizte popis dále). Pokud jenom tak lehce experimentujete v konzoli, nebo naopak ladíte váš běžící program, sledování tabulky proměnných může být mnohem pohodlnější, než abyste museli jejich hodnoty neustále ručně vypisovat. Zajímavostí je schopnost vykreslit matematická maticová data do grafu.

    Obrázek #8: Aktuální globální proměnné v konzoli

  • Console – Konzole s čistým prostředím Pythonu (vizte obrázek #1). Aniž byste si museli vedle pouštět externí terminál, zde máte možnost experimentovat či rychle zjišťovat věci v interpretu Pythonu. Na výběr máte buď klasický interpret, nebo IPython (který má mnohem více možností, ale jen jeho stručný popis by vydal na samostatný článek). Pokud spustíte nebo ladíte svůj program, tak vám poběží právě zde v konzoli jako nový proces interpretu.

    V konzoli se pěkně ukazuje krása provázanosti IDE. Hodnoty vašich proměnných vidíte v okně Variable Explorer. Pokud napíšete jméno modulu a tečku, hned vám vyskočí seznam dostupných metod a atributů. Pokud za jménem metody napíšete otevírací závorku, v okně Object inspector se zobrazí její dokumentace (pokud ji lze nalézt). Pokud tedy v hlavním editoru pracujete s objektem, o kterém víte, že je to (například) řetězec, ale editor to nedokáže rozeznat, je velice příjemné přepnout se zkratkou do konzole, napsat „str.“ a hned máte seznam metod a jejich dokumentaci po ruce.

  • History Log – Zobrazuje historii příkazů spuštěných v konzoli. Pokud si vyzkoušíte posloupnost příkazů a funguje vám, můžete si ji odsud lehce zkopírovat v celku.

    Obrázek #9: Historie příkazů v konzoli

  • File Explorer – Klasický strom s hierarchií souborového systému. Pracovat se svými soubory můžete jak zde, tak v okně Project Explorer, záleží na osobních preferencích. Spyder má koncept „pracovního adresáře“, který se nastavuje v nástrojové liště a od kterého se odvozuje kořen zde zobrazeného stromu souborů.

    Obrázek #10: Strom souborového systému

  • Find in Files – Prohledávání souborů na zvolený výraz. Lze používat regulární výrazy, začlenit či vynechat určité adresáře (opět zadané maskou) a určit kořen prohledávání. Kliknutí na výsledek vás pak přenese do editoru na konkrétní řádek daného souboru. Tato nabídka je poměrně pěkně vyřešená a ušetří mnoho času, který by jinak člověk strávil psaním argumentů pro grep. Neocenitelný pomocník, pokud například chcete přejmenovat široce používanou funkci skrz celý svůj projekt. Podpora refaktorizace tu však není, pouze to vyhledávání.

    Obrázek #11: Prohledávání souborů v projektu

  • Pylint – Okno, které vám spustí nástroj pylint na vybraném souboru. Ten vám provede analýzu kódu a ohodnotí styl programování. Zároveň upozorní na problémy či vyslovené chyby. Tento nástroj byste ideálně měli pouštět pravidelně a dbát doporučení, aby byl váš kód co nejlépe čitelný a použitelný. Nedělejme si iluzi, že by se vždy dalo psát podle stylových doporučení, ale integraci pylintu do IDE považuji za dobrý nápad, protože to má programátor více na očích a často si tak všimne detailů, které by bez něj přehlédl.

Obrázek #12: Analýza kvality kódu nástrojem pylint

Všechny součásti Spyderu, které jsme si právě předvedli, využívají možností knihovny QT a dají se v prostředí libovolně přesouvat, ukotvovat a velikostně upravovat. Proto není problém přeskládat si prvky tak, jak vám vyhovují, a ty nepotřebné zcela zavřít. Taktéž se libovolný prvek dá dočasně maximalizovat přes celé okno prostředí. Proto při studování dokumentace není nutné mžourat do malého okénka, ale můžete si jej pohodlně roztáhnout na maximální velikost. Lze to provést buď klávesovou zkratkou Ctrl+Alt+Shift+M nebo přes ikonu v liště nástrojů. Jako poslední možnost se ještě nabízí odpoutat celý prvek od hlavního okna. Pokud máte dva monitory, můžete mít na jednom monitoru editor kódu a na druhém monitoru okno s dokumentací metod nebo konzoli, dle vašich potřeb.

Spouštění programů ve Spyderu

Spyder můžete používat jen k tomu, že upravujete existující soubory na disku a pak si je spouštíte bokem v terminálu. Můžete však pro spouštění programů používat Spyder samotný, což přináší některé dodatečné možnosti. V této kapitole si popíšeme, jak postupovat a co vše tím lze získat.

Nejdříve doporučuji začít vytvořením projektu. To vám umožní definovat si dodatečná metadata k projektu, jako úpravu PYTHONPATH nebo výchozí spouštěcí argumenty. Vytvořit lze buď zcela nový projekt, nebo importovat již existující adresář s kódem.

Spustit projekt lze jednoduše otevřením požadovaného hlavního souboru a volbou položky RunRun z hlavní nabídky. To vytvoří novou kartu v okně konzole, kde se bude zobrazovat výstup vašeho programu. Po skončení programu zůstane karta otevřená, takže jej můžete kdykoliv spustit znovu poblíž zobrazeným tlačítkem Run.

Obrázek #13: Program spuštěný přímo z prostředí Spyderu, avšak bez potřebných argumentů

Hodně vašich programů však zřejmě bude vyžadovat nějaké argumenty příkazové řádky. Ty si můžete nadefinovat v nabídce RunConfigure. Tam lze nadefinovat i pracovní adresář a některé další podrobnosti. Aby se nové nastavení projevilo, musíte opět použít hlavní nabídku ke spuštění programu (či klávesovou zkratku F5). Tlačítko Run v konzoli totiž spouští program vždy ve stejné konfiguraci, jako byl minulý běh.

Ladění

Až narazíte na problém ve svém programu, budete jej potřebovat odladit. Lépe než přidáváním kontrolních výpisů to lze udělat trasováním programu, spouštěním po krocích. I toto Spyder podporuje. Využívá k tomu modul pdb. Ovládání Pdb není nejjednodušší, i když na internetu lze nalézt články, které vám osvětlí základní a nejdůležitější úkony během 30 minut. Spyder se vám to snaží ještě dále usnadnit.

Pokud spustíte program v ladicím módu pomocí nabídky RunDebug (příp. klávesové zkratky Ctrl+F5), dostanete se v konzoli do klasického režimu Pdb představovaného výpisem jména souboru včetně čísla aktuálního řádku a výzvou „(Pdb)“. Pár rad do začátku: příkaz „next“ (či „n“) vás posune o krok (řádek) dopředu, „continue“ (či „c“) přestane krokovat a „quit“ (či „q“) ukončí ladění. Enter opakuje předchozí příkaz. V průběhu ladění vám Spyder přímo ve zdrojovém editoru označuje řádek, kde přesně se nacházíte, a orientace je tedy mnohem snazší než v čistě textovém Pdb. V kterémkoliv kroku můžete používat konzoli jako běžný interpret Pythonu, takže si můžete zkoumat či upravovat proměnné (tzn. obecně libovolné objekty). Obsah vašich proměnných je také znázorněn v okně Variable Explorer, takže při krokování máte rychlý přehled, co se děje. Editor zdrojového kódu k živé úpravě programu během jeho běhu použít nelze, pouze konzoli.

Procházet celý program řádek po řádku je únavné, proto vám Spyder umožňuje nastavit breakpointy, opět z nabídky Run (nebo zkratkou F12). Pokud pak spustíte ladění programu a zadáte příkaz continue, program bude pokračovat, dokud nenarazí na breakpoint, případně na podmíněný breakpoint s platnou podmínkou. Tam se zastaví a vy si můžete prozkoumat aktuální stav proměnných a rozhodnout se, co dál.

Ladění pomocí krokování a možnost měnit obsah proměnných za chodu nabízí rychlý a mocný způsob odhalování problémů. Spyder v této oblasti umožňuje podstatně komfortnější práci, než je běžná interakce s Pdb v terminálu.

Obrázek #14: Ladění za pomoci breakpointů, konzole a okna s výpisem proměnných

Profilování výkonu

Dalším podporovaným typem spouštění je profilování. Pokud chcete optimalizovat výkon programu, potřebujete k tomu statistiky, které říkají, ve kterých částech kódu tráví procesor nejvíce času. Zkušenost totiž praví, že tyto věci se dají jen zřídka odhadnout a běžný programátorský úsudek je většinou mylný. Spyder vám nabízí spuštění programu v profilovacím režimu, kdy pro každou metodu spočítá, jak dlouho trvalo vykonání. Ve statistice je zároveň zahrnut čas potřebný pro kompilaci potřebných modulů, jejich import, vytvoření tříd a tak dále. Svůj program si spusťte pomocí RunProfile. Během profilování program poběží mnohem pomaleji než při běžném spuštění, protože je třeba počítat a zaznamenávat každé jednotlivé volání.

Obrázek #15: Výsledek profilování běhu programu (při spouštění svého programu jsem úmyslně pármilionkrát zavolal funkci sinus, abych nasimuloval výkonnostní problém)

Spyder jako interaktivní konzole

Speciální variantou programu, která neslouží jako vývojové prostředí, je jeho odlehčená verze. Spustíte ji příkazem „spyder --light“. Je to v podstatě jen interaktivní konzole s prohlížečem proměnných. Ačkoliv to všechno nabízí i plná verze Spyderu, tak pokud zrovna nevyžadujete nic jiného, může pro vás být příjemnější spustit si tuto odlehčenou verzi a nenechat si zabírat místo na obrazovce nepotřebnými prvky.

Obrázek #16: Odlehčená verze Spyderu – pouze interaktivní konzole

Závěr

Tímto končí seznámení s vývojovým prostředím Spyder. Snažil jsem se popsat většinu nejdůležitějších funkcí, i když jsem si jist, že spousta dalších vlastností se dá ještě objevit časem. Spyder je editor, který používám poslední rok a jsem s ním velmi spokojen. Sice není dokonalý, ale v porovnání s ostatními dostupnými open-source prostředími pro Python mi vychází nejlépe. Sám je psán v Pythonu a ze zdrojových souborů ho lze přímo spustit, takže se může zamlouvat i lidem, kteří by nějakou tu nedokonalost někdy sami rádi opravili. Projekt je živý a na hlášení chyb vývojáři v rozumné míře reagují. Vřele doporučuji Spyder vyzkoušet.