Úvodník

V dnešním článku se seznámíme s některými vlastnostmi integrovaného vývojového prostředí PyDev, které je určeno pro vývoj a ladění aplikací programovaných v Pythonu. PyDev je postaveno nad Eclipse, takže kromě samotného modulu pro podporu jazyka Python mohou programátoři používat i další pluginy pro toto prostředí, například plugin pro správu verzí, plánování, testování atd.

Obsah

1. Integrovaná vývojová prostředí ve Fedoře: PyDev

2. Vlastnosti prostředí PyDev

3. Instalace vývojového prostředí PyDev

4. Vytvoření nového projektu a výběr interpretru používaného projektem

5. Pracovní plochy, pomocná okna a pohledy dostupné programátorům

6. Ladění aplikací naprogramovaných v Pythonu

7. Obsah následující části seriálu

8. Předchozí části seriálu

9. Odkazy na Internetu

1. Integrovaná vývojová prostředí ve Fedoře: PyDev

V předchozích částech seriálu o integrovaných vývojových prostředích dostupných ve Fedoře jsme se seznámili s projekty Anjuta, Geany, Qt Creator, Eric, IDLE, Code:Blocks, Lazarus či Gambas. Kamil Páral navíc napsal velmi pěkný článek o Spyderu. Dnes se seznámíme s prostředím PyDev, které je určené pro všechny programátory pracující s Pythonem, a to nezávisle na použité verzi interpretru (podporován je totiž jak Python 2.x, tak i Python 3). Zatímco většina integrovaných vývojových prostředí popsaných v předchozích částech tohoto seriálu byla vytvořena ve formě samostatných aplikací (relativně) nezávislých na dalších balíčcích, je tomu v případě nástroje PyDev poněkud jinak, protože PyDev je ve skutečnosti „pouze“ rozšiřujícím modulem určeným pro integraci do univerzálního prostředí Eclipse, s nímž jsme se již na tomto serveru několikrát setkali v samostatném seriálu.

01

Obrázek 1: Ladění programu napsaného v Pythonu s využitím možností, které vývojářům poskytuje PyDev.

Připomeňme si jen ve stručnosti, že 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 nabízeno, používáno a existuje okolo něj loajální 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.

02

Obrázek 2: 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, samozřejmě však musí mít vybraný interpret nainstalován ve svém systému.

2. Vlastnosti prostředí PyDev

Jaké funkce vlastně můžeme po instalaci nástroje PyDev očekávat? Jedná se většinou o funkce, které nalezneme i v Eclipse JDT, tj. v Eclipse rozšířeném o moduly určené pro práci s projekty naprogramovanými v Javě. Především v PyDev nalezneme snadno ovladatelného správce projektů, propojení s debuggerem Pythonu (takže lze hovořit o integrovaném debuggeru), možnost připojení debuggeru k aplikaci spuštěné mimo PyDev, programátorský editor byl rozšířen o vlastnosti typické pro Python (odsazení, dokumentační komentáře, folding), PyDev samozřejmě dokáže správně zobrazit chyby hlášené interpretrem, nalezneme zde podporu pro automatické či poloautomatické doplňování klíčových slov i názvů proměnných, funkcí, metod atd.

03

Obrázek 3: Vlastnosti editoru použitého pro editaci zdrojových textů psaných v Pythonu. Právě zde se skrývají volby pro použití mezer či znaků Tab, které je důležité nastavit pro dodržení „štábní kultury“.

Nesmíme zapomenout ani na nástroje určené pro poloautomatickou opravu chyb a taktéž pro refaktoring zdrojového kódu. Samozřejmě je nutné mít na paměti, že programovací jazyk Python se v mnoha ohledech odlišuje například od Javy, což se týká například rozdílných typových systémů. Z tohoto důvodu nalezneme mezi PyDev a Eclipse JDT poměrně mnoho rozdílů v chování konkrétních nástrojů (doplňování, nabídka oprav, refaktoring). Zvolit se lze i verzi Pythonu, což je stále velmi důležitá vlastnost, protože zdaleka ne všechny projekty a knihovny již přešly na Python 3.

04

Obrázek 4: Kooperace s překladačem a zobrazení neznámého identifikátoru.

3. Instalace vývojového prostředí PyDev

Pojďme si nyní říci, jakým způsobem je možné vývojové prostředí PyDev do Fedory nainstalovat. Budeme samozřejmě potřebovat Eclipse, resp. přesněji řečeno základní framework Eclipse. Dále je pak zapotřebí JRE, které se ovšem v případě potřeby nainstaluje automaticky jako závislý balíček pro Eclipse. V repositářích systému Fedora nalezneme hned několik balíčků, v jejichž názvu se řetězec „eclipse“ vyskytuje. Je tomu tak právě z důvodu velké modularity. Pokud programátor potřebuje provádět vývoj aplikací vytvářených především v Javě, bude pro instalaci nejvhodnější zvolit balíček Eclipse JDT (Java Development Toolkit), pro vývoj v programovacích jazycích C a C++ je určen projekt nazvaný Eclipse CDT (C/C++ Development Toolkit), vývoj v Pythonu (což nás dnes zajímá nejvíce) je podporován právě v modulu PyDev, vývoj webových aplikací v Eclipse WTP (Web Tool Platform) atd.

Všechny tyto balíčky vyžadují ke své činnosti především balíček Eclipse Platform (eclipse-platform) a samozřejmě i již zmíněné JRE, tj. běhové prostředí Javy. Samotné Eclipse je totiž z velké části naprogramováno v Javě; pouze několik knihoven, například SWT, má i nativní část. Při instalaci balíčku PyDev (eclipse-pydev) se automaticky doinstalují i všechny závislosti, což mj. znamená i instalaci Jythonu (ten však ve skutečnosti nemusíte ve svém projektu explicitně používat, vyžaduje ho jen IDE pro svou činnost).

Alternativně je možné provést instalaci PyDev již do existujícího a spuštěného prostředí Eclipse ručně (pro přihlášeného uživatele), což je ukázáno na následující sekvenci screenshotů. Na začátku postačuje mít nainstalován pouze balíček nazvaný eclipse-platform, a to například příkazem:

# yum install eclipse-platform

alternativně (pokud máte příslušná práva):

$ sudo yum install eclipse-platform

Dále je možné postupovat interaktivně podle obrázků:

05

Obrázek 5: Dialog pro přidání nového modulu (pluginu) do Eclipse se skrývá pod položkou Help → Install New Software.

06

Obrázek 6: Tlačítkem Add se přidá adresa, z níž Eclipse získá informace o dostupných balíčcích. Můžete použít buď přímý link na konkrétní verzi https://dl.bintray.com/fabioz/pydev/4.5.4/, nebo se spokojit s obecnou adresou http://www.pydev.org/updates/.

07

Obrázek 7: Eclipse následně ze zadané adresy stáhne metainformace o dostupných balíčcích. Nám bude postačovat balíček PyDev for Eclipse, který stačí vybrat a kliknout na tlačítko Next.

08

Obrázek 8: Běžný dialog se zobrazením licencí (licencemi), kde se musí explicitně souhlasit s textem licence. Co k tomu dodat více?

09

Obrázek 9: Eclipse nás upozorní na neexistující certifikát, kterým je balíček podepsán. Pokud se chcete tohoto dialogu zbavit a důvěřovat i případným budoucím updatům atd., lze příslušný platný certifikát získat z adresy http://www.pydev.org/pydev_certificate.cer.

10

Obrázek 10: Po instalaci pluginu a restartu Eclipse se podívejte na dialog Help → About Eclipse Platform. Pokud se v něm objeví ikona dvou požírajících se hadů, máte z poloviny vyhráno.

4. Vytvoření nového projektu a výběr interpretru používaného projektem

Základem při práci v prostředí PyDev je vytvoření nového projektu, což je ve skutečnosti velmi snadné. Jedinou potenciálně problematickou věcí, která může způsobit problémy při prvním seznamování s PyDevem, je výběr správného interpretru jazyka Python. Opět se podívejme na sekvenci screenshotů, z nichž bude celý postup vytvoření a nakonfigurování nového projektu patrný:

11

Obrázek 11: Sekvence dialogů pro vytvoření nového projektu se skrývá pod položkou File → New → PyDev Project popř. lze použít první ikonu zobrazenou na standardně nakonfigurovaném toolbaru (ve druhém případě se Eclipse ještě přeptá na typ projektu).

Následuje jeden z nejdůležitějších dialogů, protože právě v něm můžete ovlivnit základní vlastnosti projektu. Nepřehlédněte zejména položky Project type a Grammar Version. V první položce volíte, zda se použije klasický CPython, Jython (tedy Python pro JVM) či IronPython (tedy Python pro CLR). Ve druhé položce pak dostanete na výběr verzi interpretu jazyka:

12

Obrázek 12: Nastavení základních vlastností projektu.

13

Obrázek 13: Prázdný projekt neobsahuje žádné zdrojové kódy. Ty je možné buď naimportovat popř. použít dialog pro přidání nového modulu (pravé tlačítko myši v Package Exploreru, první ikona na toolbaru atd.)

14

Obrázek 14: Prostředí zobrazí nový projekt s použitím výchozí perspektivy.

5. Pracovní plochy, pomocná okna a pohledy dostupné programátorům

Některé koncepty, které jsou využívané v integrovaném vývojovém prostředí Eclipse (a tím pádem i v PyDev), jsou pro tento projekt specifické a mnohdy je v jiných integrovaných vývojových prostředích nenajdeme. Jedná se především o koncept takzvaných pracovních ploch (workspaces), automatické či manuální přepínání mezi perspektivami (perspectives) a částečně taktéž o využití pohledů (views) a různých interních editorů (editors). Nejdříve si řekněme, co se skrývá pod pojmem pracovní plocha. Zjednodušeně řečeno se jedná o adresář (resp. složku), do něhož jsou implicitně ukládány jednotlivé projekty, s nimiž se v Eclipse pracuje.

15

Obrázek 15: Okno Quick Outline lze vyvolat klávesovou zkratkou a dostane fokus, takže je ho možné použít i bez myši.

Součástí pracovní plochy je taktéž konfigurace vlastního vývojového prostředí i konfigurace jednotlivých zásuvných modulů (plugins). Pro zajímavost: tyto informace se nachází v podadresáři se jménem „.metadata/.plugins“. S výběrem pracovní plochy se ve skutečnosti setkáte ihned při prvním spuštění Eclipse – prostředí nabídne adresář reprezentující pracovní plochu, který je samozřejmě možné změnit. Adresář s pracovní plochou lze přenést i na jiný počítač a tam ho vybrat v lokální instalaci Eclipse. Pokud jsou na tomto počítači nainstalovány všechny potřebné zásuvné moduly, neměl by nastat s přenosem celé pracovní plochy žádný problém. Taktéž je možné použít GIT, Mercurial či SVN a synchronizovat si tak nejenom vlastní projekty, ale i celé nastavení Eclipse+PyDev.

16

Obrázek 16: Na pravou stranu grafického uživatelského rozhraní bylo přichyceno okno Outline. To nyní zobrazuje podobný obsah jako Package Explorer.

Dalším důležitým konceptem, s nímž se při práci v Eclipse a tedy i v PyDev dříve či později setká prakticky každý vývojář, je koncept takzvaných perspektiv (perspectives), jejichž princip může být zpočátku pro nové uživatele možná poněkud matoucí, nicméně se jedná o velmi užitečnou technologii. Tvůrci projektu Eclipse si totiž uvědomili, že vývojáři při různých činnostech používají odlišnou konfiguraci pracovní plochy. Například při editaci zdrojového kódu preferují, aby co největší plocha obrazovky byla obsazena vlastním programátorským textovým editorem, při ladění aplikace je (kromě zdrojového kódu) taktéž nutné zobrazit obsah proměnných a zásobník volání, dalším režimem činnosti je porovnávání dvou či více verzí zdrojových kódů (zejména při synchronizaci lokální kopie projektu s repositářem) apod. Co to konkrétně znamená pro programátory využívající PyDev? K dispozici mají dvě hlavní perspektivy 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.

17

Obrázek 17: Prohlížeč globálních symbolů je taktéž velmi užitečný, zejména při práci s projekty, které importují větší množství knihoven. Povšimněte si, že mnoho symbolů (zde se jedná o symboly začínající na „len“) se v projektu či v importovaných knihovnách vyskytuje několikrát, což samozřejmě nevadí, protože jak interpret, tak i PyDev dokáže rozpoznat kontext.

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. S popisem významu těchto oken se seznámíme příště.

6. Ladění aplikací naprogramovaných v Pythonu

Samostatnou kapitolu si určitě zaslouží podpora pro ladění aplikací naprogramovaných v Pythonu. V prostředí PyDev je možné již v základní perspektivě do zdrojového kódu přidávat breakpointy a nastavovat jejich vlastnosti (především podmínku, při jejímž splnění se běh aplikace skutečně na breakpointu zastaví). Ovšem pro samotné krokování a ladění aplikací existuje speciální perspektiva obsahující několik nových typů pohledů. Jedná se především o pohled obsahující seznam viditelných proměnných (Variables) – obsah tohoto podokna se mění v závislosti na výběru vlákna (thread) v pohledu Debug, protože každé vlákno vlastní samostatnou strukturu zásobníkových rámců (stack frames). PyDev ve spolupráci s debuggerem rozpozná u každé proměnné jak její aktuální hodnotu, tak i typ této hodnoty. V průběhu krokování se testuje, která proměnná změnila svoji hodnotu a taková proměnná je následně obarvena (žluté pozadí), což samozřejmě usnadňuje ladění.

18

Obrázek 18: Přepnutí do perspektivy použité při ladění.

V perspektivě Debug se taktéž mění význam některých klávesových zkratek. Týká se to zejména zkratek používaných při krokování: funkční klávesa F5 se používá pro provedení jednoho kroku s případným vstupem do funkce či metody, klávesa F6 po provedení jednoho kroku, přičemž případné volání funkce/metody je považováno za jediný krok, funkční klávesa F7 je používána pro dokončení aktuální funkce/metody, klávesa F8 pro opětovné „rozjetí“ aplikace (ta se buď dokončí, spadne při vzniku výjimky nebo se zastaví na dalším breakpointu) a konečně taktéž důležitou klávesovou zkratkou je Ctrl+F2, která aplikaci násilně ukončí. V případě potřeby lze klávesové zkratky měnit a upravit si tak Eclipse+PyDev způsobem, který vývojáři vyhovuje nejvíce.

19

Obrázek 19: Takto vypadá perspektiva Debug při ladění programu napsaného v Pythonu. Jestliže máte pocit, že je tento pohled poněkud komplikovaný a obsahuje mnoho informací, je možné jakékoliv podokno přesunout na druhý (či třetí) monitor.

7. Obsah následující části seriálu

Jak jsme si již naznačili ve druhé kapitole, nabízí PyDev vývojářům několik dalších konceptů a technologií, s nimiž se seznámíme v následující části tohoto seriálu. Jedná se především o podporu pro automatické či poloautomatické opravy chyb ve zdrojových kódech, automatické doplňování identifikátorů, použití šablon pro vytvoření části kódu a zejména pak o nástroje sloužící k refaktoringu. Taktéž si popíšeme propojení PyDev s nástroji pro práci s jednotkovými testy (spouštění, výpis výsledků) i o ladění aplikací spuštěných mimo samotné vývojové prostředí, tj. o ladění „živých“ aplikací.

20

Obrázek 20: Automatické vygenerování properties z vybraných atributů. V tomto dialogu lze zvolit, ze kterých atributů se properties vytvoří a jaké operace s nimi budou povoleny.

21

Obrázek 21: Automatické vygenerování properties z vybraných atributů. Zde již PyDev ukazuje, na které místo ve zdrojovém kódu se properties a s nimi spojené metody vloží.

22

Obrázek 22: Refaktoring – část kódu se přenáší do nové funkce či metody. Zde nejprve označujeme tu část kódu, ze které chceme vytvořit novou funkci.

23

Obrázek 23: Refaktoring – část kódu se přenáší do nové funkce či metody. PyDev správně detekoval, že n je parametr, který bude do nové funkce vstupovat.

24

Obrázek 24: Refaktoring – část kódu se přenáší do nové funkce či metody. A zde již můžeme vidět výslednou funkci vloženou zpět do zdrojového kódu.

8. Předchozí části seriálu

  1. Vývojová prostředí ve Fedoře (1. díl)
    http://mojefedora.cz/vyvojova-prostredi-ve-fedore-1-dil/
  2. Vývojová prostředí ve Fedoře (2. díl)
    http://mojefedora.cz/vyvojova-prostredi-ve-fedore-2-dil/
  3. Vývojová prostředí ve Fedoře (3. díl)
    http://mojefedora.cz/vyvojova-prostredi-ve-fedore-3-dil/
  4. Vývojová prostředí ve Fedoře (4. díl)
    http://mojefedora.cz/vyvojova-prostredi-ve-fedore-4-dil/

25

Obrázek 25: Nastavení prostředí pro Jython. Zde je pro ilustraci dialog zobrazený na produkčním systému, v němž se používá dnes již poněkud zastaralá Java 6 (a nikoli Java 7 a Java 8, jak je tomu na moderních distribucích typu Fedora).

9. Odkazy na Internetu

  1. Seznámení s Python IDE Spyder (článek vyšel zde na mojefedora.cz)
    http://mojefedora.cz/seznameni-s-python-ide-spyder/
  2. Stránka s popisem různých IDE pro Python
    http://quintagroup.com/cms/python/ide
  3. Eclipse (stránka o frameworku na Fedoraproject.org)
    https://fedoraproject.org/wiki/Eclipse
  4. PyDev (hlavní stránka)
    http://pydev.sourceforge.net/index.html
  5. PyDev (download, v podstatě není zapotřebí)
    http://pydev.sourceforge.net/download.html
  6. PyDev (stránka s metainformacemi o PyDev pluginu, použita v Eclipse)
    http://www.pydev.org/updates/
  7. PyDev (stránka s pluginem, použita v Eclipse)
    https://dl.bintray.com/fabioz/pydev/4.5.4/
  8. Certifikát, který lze do Eclipse doinstalovat
    http://www.pydev.org/pydev_certificate.cer
  9. PyDev FAQ
    http://pydev.sourceforge.net/faq.html
  10. PyDev (Wikipedia)
    https://en.wikipedia.org/wiki/PyDev
  11. Python (oficiální stránky projektu)
    https://www.python.org/
  12. Jython
    http://www.jython.org/
  13. IronPython
    http://ironpython.net/
  14. Python 3.5.1 documentation
    https://docs.python.org/3/