Ve čtvrté části seriálu o integrovaných vývojových prostředích, která jsou programátorům dostupná v systému Fedora, se budeme věnovat popisu IDE vhodných pro tvorbu a ladění aplikací napsaných v Pythonu. Pro vývojáře používající tento programovací jazyk existuje ve Fedoře hned několik specializovaných integrovaných vývojových prostředí a taktéž i větší množství univerzálních IDE, která se s využitím zásuvných modulů (pluginů) mohou Pythonu relativně snadno přizpůsobit.
Integrovaná vývojová prostředí ve Fedoře (4.díl)
V předchozích třech částech seriálu o integrovaných vývojových prostředích nabízených v systému Fedora jsme si popsali celou řadu integrovaných vývojových prostředí určených pro práci s běžnými (řekněme s trochou nadsázky „mainstreamovými“ jazyky). Některá z popisovaných IDE bylo možné s využitím pluginů rozšířit takovým způsobem, aby v nich byly podporovány další programovací jazyky, jiné IDE, především se jedná o prostředí nazvaná Code::Blocks a Qt Creator byly zaměřeny především na vývoj aplikací v programovacích jazycích C a C++.
V dnešním článku i v článku navazujícím se zaměříme především na ta integrovaná vývojová prostředí, která mohou být využita vývojáři pracujícími s oblíbeným a dnes již velmi rozšířeným programovacím jazykem Python. Kromě klasicky pojatých IDE typu Eric, Spyder či IDLE se dnes i v následujícím dílu budeme zabývat i univerzálními IDE s existujícím pluginem pro Python (zejména PyDev, zrychleně též Anjuta a Geany) a zmíníme se i o velmi zajímavých projektech nazvaných IPython a IPython Notebook, což jsou nástroje, které se sice běžnému IDE příliš nepodobají, ovšem nabízí podobnou (a někdy i větší) funkcionalitu.
Specializovaná IDE pro Python versus univerzální rozšiřitelná IDE
Při výběru vhodného integrovaného vývojového prostředí pro Python se vývojáři mohou rozhodovat mezi dvěma výše zmíněnými skupinami IDE. Na jedné straně stojí vývojová prostředí vytvořená speciálně pro Python, na straně druhé pak nalezneme vývojová prostředí univerzální, jež je však možné pro Python nakonfigurovat či rozšířit s využitím zásuvných modulů. Výběr konkrétního vývojového prostředí závisí na mnoha okolnostech a samozřejmě i na osobních preferencích uživatelů.
Někteří vývojáři dávají například přednost nástrojům typu Eclipse (zde především rozšíření PyDev jakožto modulu pro vývoj v Pythonu), u nichž se za velké množství funkcí platí zvýšenými nároky na operační paměť a na výpočetní výkon mikroprocesoru, další vývojáři se spíše drží tradiční filozofie Unixu a dávají přednost jednoúčelovým nástrojům, další vývojáři preferují použití terminálu/konzole popř. IDE s webovým rozhraním atd. Z tohoto důvodu většinou není možné snadno a jednoznačně rozhodnout, které z dále popsaných integrovaných vývojových prostředí je pro Python nejvhodnější pro všechny uživatele a ve všech situacích.
V první části tohoto článku si nejprve popíšeme specializovaná integrovaná vývojová prostředí pro Python. Jedná se především o IDLE, což je poněkud podceňované, přesto však poměrně výkonné vývojové prostředí a dále pak o plnohodnotné IDE nazvané Eric. Tato integrovaná vývojová prostředí mají tu výhodu, že jsou vytvářena přímo programátory používajícími Python jako svůj oblíbený programovací jazyk, takže lze očekávat, že tvůrci IDE budou mít stejné či alespoň velmi podobné požadavky jako vlastní uživatelé (IDLE dokonce spoluvyvíjel sám autor Pythonu: Guido van Rossum).
Z univerzálních IDE upravených či rozšířených pro potřeby programovacího jazyka Python stojí za zmínku především PyDev, tj. zásuvný modul pro Eclipse. Ovšem nesmíme zapomenout ani na již popsanou Anjutu a Geany – dnes si jen připomeneme, že i tato IDE lze s Pythonem relativně bez problému použít. V další části článku budou taktéž popsány projekty Spyder, IPython a IPython Notebook, jejichž princip práce je založen na velmi úzké obousměrné interakci programátora s interpretrem Pythonu. IPython Notebook je navíc nástroj kombinující možnosti IDE s poměrně mocným prezentačním webovým nástrojem.
IDLE
První integrované vývojové prostředí, které si dnes popíšeme, se jmenuje IDLE, neboli celým názvem Integrated DeveLopment Environment. Dalším významem tohoto názvu je odkaz na jméno herce Erica Idleho, který byl členem skupiny Monty Python's Flying Circus. Na této aplikaci je zajímavý především fakt, že IDLE je (a to mnohdy bez vědomí uživatelů) nainstalováno na velkém množství počítačů, a to z toho důvodu, že se toto prostředí instaluje v balíčku nazvaném v systému Fedora „python-tools“ (viz screenshot číslo 7 umístěný pod tímto odstavcem), společně s několika dalšími užitečnými nástroji a knihovnami.
V tomto odstavci na chvíli odbočíme od popisu integrovaných vývojových prostředí pro systém Fedora. Pro některé čtenáře totiž může být užitečná i informace, že IDLE je součástí instalací Pythonu na systému Microsoft Windows. Toto prostředí nalezneme například v populárním instalačním balíčku Pythonu připraveném společností Active State (tento balíček se nazývá ActivePython, existují však i čistě open source varianty Pythonu pro zmiňovaný operační systém).
Jak již z výše uvedených informací vyplývá, jedná se v případě IDLE o multiplatformní integrované vývojové prostředí naprogramované čistě v Pythonu, přičemž multiplatformnost je zaručena mj. i tím, že IDLE využívá pro své grafické uživatelské rozhraní knihovnu (modul) nazvaný Tkinter zajišťující propojení programovacího jazyka Python s Tcl/Tk. Tcl je programovací jazyk navržený Johnem Ousterhoutem. Vrchol popularity tohoto jazyka nastal zhruba před patnácti lety, ovšem stále se používá a to mj. i díky existenci knihovny Tk pro tvorbu GUI. Modul Tkinter byl vytvořen Steenem Lumholtem a Guidem van Rossumem (autorem samotného Pythonu).
Integrované vývojové prostředí IDLE s velkou pravděpodobností nebude vyhovovat všem programátorům a to mj. i z toho důvodu, že se v něm používá poněkud jiná filozofie práce s GUI. Samotné grafické uživatelské rozhraní IDLE je totiž založeno na systému samostatných oken a nikoli na dnes asi nejvíce používaném přístupu s jedním oknem, v němž se kromě různých nástrojových lišt zobrazuje i strom projektu a jednotlivé zdrojové soubory jsou umístěny v záložkách (tabech).
V programátorském prostředí IDLE se setkáme především s oknem nazvaným Python Shell, v němž je možné zadávat příkazy, které jsou Pythonem ihned (interaktivně) zpracovány. Oproti výchozímu shellu jazyka Python (ten je většinou spouštěný v terminálu) je Python Shell vylepšen, například o automatické doplňování názvů tříd, funkcí či proměnných, zvýraznění syntaxe atd.
Kromě Python Shellu se v IDLE každý zdrojový soubor otevírá v samostatném okně (editoru), což s sebou přináší klady, ale i některé zápory ne nepodobné chování grafického editoru GIMP. Jedním z problémů je fakt, že se okna otevírají na nejvyšší úrovni desktopu, takže se mezi nimi poměrně obtížně přepíná, alespoň v případě použití těch správců oken, které neumožňují sdružování oken s využitím tabů (mezi správce oken, které tuto funkci mají, patří například známý Fluxbox).
Programátorský editor zabudovaný do integrovaného vývojového prostředí IDLE patří do skupiny spíše jednodušších editorů, i když v něm najdeme i funkci pro automatické doplňování, zobrazení „bublinové“ nápovědy k metodám a funkcím či automatické odsazování bloků kódu (což je v Pythonu velmi důležitá vlastnost). Programátoři zvyklí na používání maker, automatické skládání kódu (folding) či na automatický refaktoring však budou možnostmi editoru v IDLE spíše zklamáni.
Programátorský editor IDLE samozřejmě podporuje i zvýraznění syntaxe (což je dnes již vlastnost očekávaná ve všech typech IDE) a s editorem taktéž souvisí další typ okna – Class Browser. V Class Browseru se zobrazuje seznam všech tříd i funkcí/metod přítomných v jednom zdrojovém souboru, což částečně nahrazuje klasický stromový pohled na projekt – viz též screenshoty číslo 14 a 15. Class Browser kromě pasivního zobrazení tříd, funkcí a metod samozřejmě umožňuje i rychlý přechod na vybraný objekt.
V samostatných oknech se zobrazují i všechny další moduly nabízené integrovaným vývojovým prostředím IDLE. Například se jedná o debugger, který programátorům nabízí základní funkce společné všem moderním debuggerům – krokování laděnými aplikacemi po příkazech, vstup či naopak přeskočení volání funkce/metody, zobrazení globálních i lokálních proměnných, zobrazení zásobníku obsahujícího vstupní body volaných funkcí/metod atd.
Mnohé další funkce však v současné verzi IDLE nenajdeme – například propojení s nástroji pro správu verzí, nástroje pro refaktoring zdrojových kódů atd. Z tohoto hlediska lze IDLE považovat spíše za jednodušeji pojaté vývojové prostředí, což však nemusí být v některých situacích (výuka) bráno jako pouze záporná vlastnost. Minimalisticky je pojata i nápověda, která se skládá z jediného statického textového dokumentu.
Eric
Druhé integrované vývojové prostředí, s nímž se v dnešním článku podrobněji seznámíme, se jmenuje Eric. Tento název opět odkazuje na herce Erica Idleho ze skupiny Monty Python's Flying Circus. Jedná se o vývojové prostředí určené převážné pro tvorbu aplikací v programovacím jazyce Python a taktéž Ruby, my se ovšem dnes budeme zabývat především funkcionalitou dostupnou pro vývojáře využívající Python. Možnosti Erica při práci s projekty v Pythonu a Ruby jsou totiž v některých ohledech odlišné, a to především kvůli tomu, že pro oba jazyky jsou dostupné jiné přídavné moduly – pluginy (základ prostředí – správce projektů a textový editor, je však shodný).
Podobně jako v případě výše popsaného vývojového prostředí IDLE je i Eric z velké části naprogramován v samotném Pythonu, z čehož lze usuzovat, že vývojáři Ericu budou velmi dobře rozumět požadavkům programátorů, kteří toto vývojové prostředí budou chtít při své práci používat. Ve zbylé části tohoto článku se zaměříme na popis Erica verze 4 (konkrétně 4.5.10 – viz též průběh instalace na obrázku 21 a 22 i dialog zobrazený na obrázku 23), využívající knihovnu Qt4. Tato verze integrovaného prostředí Eric je založena na Pythonu 2.x, což však samozřejmě neznamená, že by v této verzi nebylo možné vyvíjet aplikace v Pythonu 3.
Zatímco integrované vývojové prostředí IDLE využívalo pro svoje grafické uživatelské rozhraní knihovnu Tk, je v IDE Eric použita známá multiplatformní knihovna Qt, přičemž vazba mezi Pythonem a Qt je zajištěna s využitím modulu PyQt. V IDE Eric je taktéž využívána komponenta QScintilla, která je použita jak v integrovaném programátorském editoru (celý editor je realizován QScintillou a vazbami na okolní prostředí), tak i v několika dalších formulářích a dialozích. I přesto, že je Eric založen na knihovně Qt, je jeho integrace do výchozího desktopového prostředí Fedory – Gnome Shellu – velmi dobrá, o čemž ostatně svědčí i snímky obrazovky použité v tomto článku – ty vznikly ve Fedoře 19 se spuštěným Gnome Shellem.
Základem každého moderního integrovaného vývojového prostředí je správce projektů, programátorský editor, vazba na překladač či interpret podporovaného programovacího jazyka a v neposlední řadě pak i vazba na debugger, popř. existence vlastního integrovaného debuggeru. Správce projektů se samozřejmě v integrovaném vývojovém prostředí Eric nachází, přičemž ve výchozím nastavení GUI je jeho nástrojový panel umístěn v levé části okna (obrázek číslo 25). V tomto panelu je zobrazena klasická stromová struktura projektu, kterou můžeme znát i z dalších typů integrovaných vývojových prostředí.
Se správcem projektů jsou propojeny i další části integrovaného vývojového prostředí Eric, takže je například možné provádět vyhledání textu (či vyhledávání textu současně s jeho nahrazováním), a to v rámci celého projektu apod. U projektu lze kromě běžných operací (práce se seznamem zdrojových souborů, nastavení verze Pythonu pro projekt atd.) používat i takzvaný TODO list, tj. seznam, do něhož se integrují poznámky o těch částech projektu, které je nutné vylepšit či vůbec implementovat.
Samostatný popis si zaslouží programátorský editor integrovaný do IDE Eric, protože jeho možnosti jsou mnohem větší, než tomu bylo v případě poměrně omezeného editoru použitého ve výše popsaném prostředí IDLE. Editor v Ericovi je založen na již zmíněné komponentě QScintilla a nabízí vývojářům prakticky všechny základní i pokročilejší vlastnosti, které u programátorských editorů očekáváme.
Především se jedná o podporu zvýrazňování syntaxe, které je konfigurovatelné, což znamená, že kromě zvýraznění zdrojových kódů Pythonu a Ruby jsou k dispozici i pravidla pro několik desítek dalších typů textových souborů a další pravidla lze v případě nutnosti doinstalovat či si je napsat. Editor taktéž podporuje folding, tj. skrytí řádků s implementací funkcí/metod či skrytí těl bloků (například bloku uvnitř smyčky for). Samozřejmostí je taktéž podpora pro doplňování kódu, zobrazení bublinové nápovědy k vybraným symbolům či zvýraznění párových závorek.
Další nezbytnou součástí integrovaného vývojového prostředí Eric je debugger, který umožňuje ladění aplikací naprogramovaných v Pythonu, a to včetně aplikací používajících multithreading či aplikací využívajících knihovnu Tkinter (to bylo v případě IDLE poněkud problematické, protože samotné IDLE je napsáno s využitím Tkinteru). Breakpointy, tj. řádky, na nichž se má pozastavit běh aplikace, se samozřejmě nastavují přímo v programátorském editoru, což je ostatně patrné i ze screenshotů.
U breakpointů lze zvolit i podmínku určující zastavení běhu aplikace, popř. počet průchodů tímto bodem. Při ladění programů v integrovaném debuggeru lze využívat většinu funkcí, které programátor od tohoto typu ladicího prostředku očekává - krokování se vstupem do funkcí, krokování s přeskočením volání funkce (celá volaná funkce se provede jako jeden krok), zobrazení hodnot aktuálně viditelných proměnných a argumentů funkcí, seznam běžících a/nebo pozastavených vláken atd.
Eric do sebe taktéž integruje konzoli se spuštěným interpretrem Pythonu, což je velmi užitečný nástroj umožňující například testování částí vyvíjené aplikace, podporu pro ladění či trasování aplikace atd. Na rozdíl od některých jiných IDE se i v konzoli Erica používá zvýrazňování syntaxe a automatické doplňování kódu, takže se možnosti této konzole přibližují možnostem později popsaného IPythonu.
Integrované vývojové prostředí Eric dále využívá systém zásuvných modulů (pluginů), který zajišťuje modularitu celého IDE i podporu pro instalaci externích pluginů, kterých v současnosti existuje několik desítek. Jedná se jak o obecné pluginy rozšiřující možnosti samotného IDE nezávisle na použitém, programovacím jazyku, tak i o pluginy určené především pro usnadnění vývoje aplikací v Pythonu.
Z dostupných zásuvných modulů lze jmenovat například plugin Rope používaný při refaktoringu zdrojových kódů či plugin volající PyLint, jenž lze využít pro kontrolu zdrojových kódů. Další pluginy umožňují napojení k systémům pro správu verzí (CSV, Git, Mercurial atd.) přímo z integrovaného vývojového prostředí, což je vlastnost, která citelně chybí právě v IDLE. Formou pluginů jsou realizováni i někteří „kouzelníci“ (wizards) používaní pro vyvolání složitějších operací vyžadujících provedení několika kroků.
Z mnoha dalších vlastností Erica bych jmenoval i modul pro tvorbu diagramů tříd na základě analýzy zdrojových kódů vyvíjené aplikace. Jedná se o nástroj, který například může pomoci s vytvářením (programátorské) dokumentace. Vygenerované diagramy tříd jsou editovatelné, což je užitečné, protože ve chvíli, kdy jsou vazby mezi třídami složitější, se musí v automaticky vytvořeném grafu provést úpravy, aby byly vazby přehlednější.
Obsah následující části seriálu
V následující části seriálu o integrovaných vývojových prostředích dostupných v systému Fedora si popíšeme další IDE určená pro tvorbu a ladění aplikací napsaných v programovacím jazyku Python. Především si popíšeme prostředí PyDev založeného na Eclipse, dále se zmíníme o nastavení Anjuty pro práci s Pythonem a posléze se budeme zabývat i nástroji nazvanými IPython a IPython Notebook.
4. 9. 2013 at 18:27
Quido? To snad nie.
5. 9. 2013 at 09:40
Sakrys takovy typo, to se moc omlouvam a diky za upozorneni!
8. 9. 2013 at 12:35
Opraveno.
5. 9. 2013 at 08:42
Ještě bych zmínil Ninja IDE: http://ninja-ide.org/. Je mimochodem také k nalezení v nějakém repositáři pro fedoru.
5. 9. 2013 at 09:41
jojo zminim se o nem priste, vedle PyDevu a IPython veci.