V dnešním článku si ukážeme, jakým způsobem je možné nakonfigurovat integrované vývojové prostředí PyDev (založené na Eclipse) tak, aby bylo možné toto IDE použít pro vývoj na „vzdáleném“ Raspberry Pi nebo na podobném méně výkonném počítači. K tomu využijeme plugin nazvaný Remote System Explorer.

Obsah

1. Použití IDE PyDev pro vzdálený vývoj na Raspberry Pi

2. Eclipse a PyDev na poměrně nevýkonném Raspberry Pi?

3. Elegantní řešení – použití vzdáleného vývoje s využitím pluginu Remote System Explorer

4. Instalace platformy Eclipse

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

6. Instalace pluginu Remote System Explorer

7. Přepnutí do perspektivy Remote System Explorer

8. Vytvoření propojení Eclipse (PyDev) se vzdáleným počítačem

9. Práce s projektem

10. Spuštění projektu na vzdáleném počítači (Remote Shell)

11. Jak jednoduše zjistit, kde se projekt spustil?

12. Další možnosti pluginu PyDev

13. Předchozí části seriálu o IDE ve Fedoře

14. Odkazy na Internetu

1. Použití IDE PyDev pro vzdálený vývoj na Raspberry Pi

S integrovaným vývojovým prostředím PyDev jsme se již na stránkách tohoto serveru seznámili ve dvoudílném článku, který v případě zájmu naleznete na adresách https://mojefedora.cz/vyvojova-prostredi-ve-fedore-1-dil/ a https://mojefedora.cz/vyvojova-prostredi-ve-fedore-2-dil/. Připomeňme si jen ve stručnosti, že PyDev je integrované vývojové prostředí (IDE) 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 starší Python 2.x, tak i novější Python 3). Zatímco většina integrovaných vývojových prostředí popsaných dříve 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í (resp. přesněji řečeno platformy) Eclipse, s nímž jsme se taktéž na tomto serveru několikrát setkali, a to konkrétně 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.

Samotný 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. Eclipse a PyDev na poměrně nevýkonném Raspberry Pi?

Již samotná platforma Eclipse, která je prakticky kompletně (s výjimkou několika nativních knihoven, například knihovny SWT) naprogramovaná v Javě, je značně náročná na systémové prostředky. Když si k tomu připočteme nároky modulu PyDev, zjistíme, že přímé provozování tohoto nástroje na jednodeskových mikropočítačích Raspberry Pi je sice teoreticky možné, ale rychlost odezvy zajisté nebude oslnivá. Navíc by u některých modelů s 256 MB nebo 512 MB RAM zabralo prakticky celou paměť jen vývojové prostředí, což by si vynutilo použití swapovacího prostoru a samozřejmě by znamenalo další citelné zpomalení práce (u modelu s 256 MB je navíc potřebné laborovat s nastavením, aby se Eclipse vůbec spustilo).

12

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

Jen pro stručný přehled si uveďme základní parametry různých modelů mikropočítače Raspberry Pi. Z následující tabulky je patrné, že se ani u nejvyššího modelu nejedná o žádnou výkonnostní špičku (to ovšem pro mnoho účelů nevadí):

MikropočítačSoCJádroFrekvenceRAM
Raspberry Pi 1 Model ABCM2835ARM11700 MHz256 MB
Raspberry Pi 1 Model A+BCM2835ARM11700 MHz512 MB
Raspberry Pi 1 Model BBCM2835ARM11700 MHz512 MB
Raspberry Pi 1 Model B+BCM2835ARM11700 MHz512 MB
Raspberry Pi ZeroBCM2835ARM111000 MHz512 MB
Compute Module 1BCM2835ARM11700 MHz512 MB
Raspberry Pi 2 Model BBCM2836Cortex-A7 (Quad core)900 MHz1024 MB
Raspberry Pi 3 Model BBCM2837Cortex-A53 (Quad core)1200 MHz1024 MB
Compute Module 3BCM2837Cortex-A53 (Quad core)1200 MHz1024 MB

Poznámka1: frekvence procesorového jádra může být zvýšena, pro tento účel existuje volba v konfiguračním souboru (Raspberry Pi nemá BIOS).

Poznámka2: RAM je ve skutečnosti sdílena s GPU, což ještě více zmenšuje kapacitu použitelnou pro Eclipse+PyDev.

01

Obrázek 4: Nástroj PyDev ve spolupráci s interpretrem programovacího jazyka Python dokáže detekovat některé problematické části zdrojového kódu. Pro kontrolu sémantických chyb je však nutné používat testy.

3. Elegantní řešení – použití vzdáleného vývoje s využitím pluginu Remote System Explorer

Jakým způsobem je tedy možné vyřešit dva tak protichůdné požadavky, tj. použít rozsáhlé vývojové prostředí Eclipse s pluginem PyDev na relativně nevýkonných jednodeskových mikropočítačích Raspberry Pi? Jedno z řešení spočívá v použití Eclipse+PyDev na běžném desktopu nebo notebooku s odpovídajícím výpočetním výkonem i kapacitou operační paměti (postačuje prakticky jakýkoli notebook vyrobený v posledních pěti letech), ovšem s tím, že vyvíjené projekty bude možné spustit přímo na Raspberry Pi. K tomuto účelu slouží další plugin pro Eclipse, který se jmenuje Remote System Explorer a který nalezneme na adrese https://marketplace.eclipse.org/content/remote-system-explorer-ssh-telnet-ftp-and-dstore-protocols.

Obrázek 5: Logo pluginu Remote System Explorer.

Remote System Explorer umožňuje, aby se v Eclipse pracovalo s projekty uloženými na vzdáleném počítači (tedy na Raspberry Pi) a dokonce v sobě integruje i terminál, který použijeme pro spuštění těchto projektů. Pro připojení ke vzdálenému počítači jsou používány protokoly SSH, Telnet, FTP a DStore. My samozřejmě využijeme SSH (ostatně předpokládám, že vám na Raspberry Pi neběží služby pro Telnet ani pro FTP).

4. Instalace platformy Eclipse

Pojďme si nyní říci, jakým způsobem je možné vývojové prostředí Eclipse s pluginy PyDev a Remote System Explorer nainstalovat na desktop či notebook s Fedorou. Nejprve samozřejmě budeme potřebovat samotnou platformu Eclipse, resp. přesněji řečeno základní framework Eclipse. Dále je pak zapotřebí JRE (běhové prostředí Javy), 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.

Na začátku postačuje mít nainstalován pouze balíček nazvaný eclipse-platform, a to například příkazem:

# dnf install eclipse-platform

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

$ sudo yum install eclipse-platform

Pokud byla instalace úspěšná, bude možné Eclipse spustit z Gnome Shellu nebo z jiného používaného desktopového prostředí:

Obrázek 6: Vývojová platforma Eclipse spuštěná na právě nainstalované Fedoře. V případě, že do Eclipse není nainstalován PyDev, Eclipse JDT či Eclipse CDT, jsou možnosti této platformy z hlediska koncových uživatelů-programátorů poměrně omezené.

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

Pokud se vám podařilo spustit vývojové prostředí Eclipse, je možné do něj doinstalovat pluginy PyDev a následně i Remote System Explorer. Nejdřív si ukažme instalaci PyDev:

05

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

Obrázek 8: 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/ (což doporučuji).

Obrázek 9: 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.

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

Obrázek 11: 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.

Obrázek 12: Pro jistotu si po restartu Eclipse (ten se provede po dotazu) zkuste vytvořit nový projekt. V dialogu pro vytvoření nového projektu by se měla ukázat i nabídka PyDev.

6. Instalace pluginu Remote System Explorer

Třetím krokem je instalace pluginu Remote System Explorer. Ten budeme instalovat podobným způsobem, jako samotný PyDev, tedy přes interní instalační nástroj samotného prostředí Eclipse. Opět se podívejme na screenshoty, z nichž bude průběh instalace patrný:

Obrázek 13: Pomocí nám již známé položky Help → Install New Software spustíme interní instalační nástroj prostředí Eclipse. Zde ve výběrovém boxu „Work with“ vyberte možnost „All available sites“ a do textového políčka pro omezení počtu vypisovaných pluginů zapište „remote“ (obě možnosti jsou zvýrazněny).

Obrázek 14: Z výpisu pluginů (mělo by se jich zobrazit maximálně několik desítek) vyberte podstrom nazvaný General Purpose Tools a z něho dva pluginy Remote System Explorer End-User Runtime a Remote System Explorer User Actions.

Obrázek 15: Pluginy by se měly začít stahovat a postupně instalovat.

Obrázek 16: Eclipse nás opět s velkou pravděpodobností upozorní na neexistující certifikát, kterým je balíček podepsán. Po prozkoumání informace o certifikátu zatrhněte checkbox a zvolte Ok..

Obrázek 17: Po restartu Eclipse je možné provést závěrečnou rychlou kontrolu v „About dialogu“. Zde by se měly zobrazit ikony prostředí Remote System Exploreru i PyDevu (poslední dvě ikony).

7. Přepnutí do perspektivy Remote System Explorer

V této chvíli byste měli mít na svém pracovním počítači nainstalováno integrované vývojové prostředí Eclipse s pluginem PyDev umožňujícím vývoj v Pythonu i s pluginem Remote System Explorer pro připojení ke vzdálenému počítači. Zbývá nám tedy si připojení vytvořit. Nejjednodušší je se nejprve přepnout do perspektivy nazvané přímo Remote System Explorer, což je naznačeno na dalším screenshotu:

Obrázek 18: Přepnutí do perspektivy Remote System Explorer.

Poznámka: některé koncepty, které jsou využívané v integrovaném vývojovém prostředí Eclipse, 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). Především koncept perspektiv 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 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) atd.

Jakým způsobem se však s perspektivami pracuje? Je to ve skutečnosti velmi jednoduché, protože samotné prostředí Eclipse dokáže při přepnutí činnosti vybrat správnou perspektivu; dokonce se při přepínání zeptá, jestli se má jednat o implicitní chování. Perspektivu je kdykoli možné přepnout i pomocí ikon zobrazených v pravém horním rohu (velikost plochy pro ikony lze zvětšit myší, což je většinou nutné), popř. lze využít i příkaz Windows->Open Perspective dostupný z hlavního menu Eclipse.

8. Vytvoření propojení Eclipse (PyDev) se vzdáleným počítačem

Po přepnutí do perspektivy Remote System Explorer se změní především levá část grafického uživatelského rozhraní Eclipse, která již nebude zobrazovat pohled na strukturu projektu, ale seznam vzdálených počítačů a jejich obsahu. Můžeme zde z kontextového menu (kliknutím na trojúhelníček či pravým tlačítkem myši) vybrat příkaz New Connection, po jehož spuštění se objeví následující dialog:

Obrázek 19: Dialog pro výběr připojení Eclipse ke vzdálenému počítači.

Z nabídky možných připojení vybereme položku SSH Only, protože se ke vzdálenému počítači Raspberry Pi budeme připojovat s využitím protokolu SSH. V tomto okamžiku předpokládáme, že na Raspberry Pi skutečně běží služba ssh, což lze ověřit příkazem (spuštěným na Raspberry Pi!):

service ssh status

Následně v Eclipse zadáme parametry připojení, především jméno vzdáleného počítače či jeho IP adresu a jméno připojení/počítače (to může být libovolné). Ke vzdálenému počítači se ihned poté můžeme pokusit připojit, stačí zadat uživatelské jméno a heslo (oboje je platné pro vzdálený počítač, tedy Raspberry Pi):

Obrázek 20: Připojení ke vzdálenému počítači. Je zde nutné zadat jméno uživatele a jeho heslo. Tyto údaje budou použity pro přihlášení přes SSH.

Poznámka: pokud se přihlášení nepodaří, zkontrolujte si, zda se můžeme přihlásit přímo přes příkazovou řádku:

ssh -v vzdaleny_stroj

9. Práce s projektem

Ve chvíli, kdy jsme připojeni ke vzdálenému počítači, můžeme pracovat se zdrojovými soubory, které jsou na něm uloženy. Pokud navíc použijeme stejné verze interpretru jazyka Python na lokálním i vzdáleném počítači, lze projekt spouštět jak na počítači lokálním (tudíž ve většině případů mnohem výkonnějším), tak i na počítači vzdáleném (Raspberry Pi). Lokální spuštění je snadné – použijí se ikony na hlavním toolbaru popř. příkazy dostupné z menu Run (zde naleznete i případné klávesové zkratky). Samozřejmě lze provádět veškeré další úpravy projektu, procházet nápovědou k funkcím ze standardních knihoven Pythonu, spouštět jednotkové testy, refaktorovat kód atd.

Obrázek 21: Takto vypadá grafické uživatelské rozhraní Eclipse ve chvíli, kdy jsme připojeni ke vzdálenému počítači. Soubor test.py je ve skutečnosti uložen na vzdáleném stroji, což je barevně zvýrazněno. Pokud se projekt spustí, jedná se o spuštění na lokálním počítači (opět zvýrazněno). Skript je spuštěn lokálně přes integrovanou konzoli.

10. Spuštění projektu na vzdáleném počítači (Remote Shell)

Pro spuštění projektu na vzdáleném počítači se použije takzvaný Remote Shell, jehož název přesně odpovídá funkci – jedná se skutečně a terminál plně integrovaný do Eclipse, který spouští příkazy na vzdáleném počítači. A vzhledem k tomu, že náš projekt je psaný v Pythonu, je jeho spuštění ve skutečnosti zcela triviální, což ukazují následující dva screenshoty (práce s projektem vytvořeným v Javě či C/C++ již není tak přímočará):

Obrázek 22: Spuštění Remote Shellu přes volbu SSH Shells. Na vzdálený počítač jsme přihlášeni pod uživatelem „tester“, tj. pod stejným uživatelem, který vytvořil vzdálený projekt.

Obrázek 23: Projekt můžeme triviálně spustit interpretrem jazyka Python. Oproti obrázku číslo 21 se zde jedná o spuštění na vzdáleném počítači (tedy na Raspberry Pi), nikoli na počítači lokálním (desktopu, notebooku).

11. Jak jednoduše zjistit, kde se projekt spustil?

Spouštění projektu na lokálním či vzdáleném počítači může být někdy matoucí, proto si můžeme projekt velmi snadno upravit takovým způsobem, aby po svém spuštění vypsal jméno počítače, na němž právě běží. K tomu stačí jediná deklarace import socket následovaný řádkem print(socket.gethostname()):

Obrázek 24: Tento jednoduchý příkaz vám vždy naznačí, na jakém stroji projekt právě spouštíte.

12. Další možnosti pluginu PyDev

Všechny další funkce nabízené pluginem PyDev jsou samozřejmě stále dostupné, protože jediný rozdíl mezi lokálním a vzdáleným projektem spočívá v odlišné možnosti spouštění a ladění. To mj. znamená, že lze použít například refaktoring atd. atd.:

04_

Obrázek 25: Dialog zobrazující změny ve zdrojovém kódu provedené po přejmenování funkce.

05

Obrázek 26: Dialog pro určení, které atributy budou dostupné přes properties. Před vyvoláním tohoto dialogu se musí textový kurzor nacházet uvnitř třídy a následně se musí zadat příkaz Refactoring → Generate Properties. Může se zvolit, pro které atributy se vytvoří gettery, settery, deletery atd.

14

Obrázek 27: Refaktoring.

13. Předchozí části seriálu o IDE ve Fedoře

Odkazy, které naleznete pod tímto odstavcem, vedou na další články vydané na serveru mojefedora.cz, v nichž jsme se zabývali problematikou integrovaných vývojových prostředí se zaměřením na aktuální verze Fedory:

  1. Vývojová prostředí ve Fedoře (1. díl)
    https://mojefedora.cz/vyvojova-prostredi-ve-fedore-1-dil/
  2. Vývojová prostředí ve Fedoře (2. díl)
    https://mojefedora.cz/vyvojova-prostredi-ve-fedore-2-dil/
  3. Vývojová prostředí ve Fedoře (3. díl)
    https://mojefedora.cz/vyvojova-prostredi-ve-fedore-3-dil/
  4. Vývojová prostředí ve Fedoře (4. díl)
    https://mojefedora.cz/vyvojova-prostredi-ve-fedore-4-dil/
  5. Vrapper aneb spojení možností Vimu a Eclipse
    https://mojefedora.cz/vrapper-aneb-spojeni-moznosti-vimu-a-eclipse/
  6. Integrovaná vývojová prostředí ve Fedoře: PyDev
    https://mojefedora.cz/integrovana-vyvojova-prostredi-ve-fedore-pydev/
  7. Integrovaná vývojová prostředí ve Fedoře: PyDev (2.část)
    https://mojefedora.cz/integrovana-vyvojova-prostredi-ve-fedore-pydev-2-cast/

14. Odkazy na Internetu

  1. Remote System Explorer
    https://marketplace.eclipse.org/content/remote-system-explorer-ssh-telnet-ftp-and-dstore-protocols
  2. Seznámení s Python IDE Spyder (článek vyšel zde na mojefedora.cz)
    http://mojefedora.cz/seznameni-s-python-ide-spyder/
  3. Stránka s popisem různých IDE pro Python
    http://quintagroup.com/cms/python/ide
  4. Eclipse (stránka o frameworku na Fedoraproject.org)
    https://fedoraproject.org/wiki/Eclipse
  5. PyDev (hlavní stránka)
    http://pydev.sourceforge.net/index.html
  6. PyDev (download, v podstatě není zapotřebí)
    http://pydev.sourceforge.net/download.html
  7. PyDev (stránka s metainformacemi o PyDev pluginu, použita v Eclipse)
    http://www.pydev.org/updates/
  8. PyDev (stránka s pluginem, použita v Eclipse)
    https://dl.bintray.com/fabioz/pydev/4.5.4/
  9. Python Remote Development on Raspberry Pi with PyDev and Eclipse
    http://raspberrypi4u.blogspot.cz/2015/03/python-remote-development-on-raspberry.html
  10. Certifikát, který lze do Eclipse doinstalovat
    http://www.pydev.org/pydev_certificate.cer
  11. PyDev FAQ
    http://pydev.sourceforge.net/faq.html
  12. PyDev (Wikipedia)
    https://en.wikipedia.org/wiki/PyDev
  13. Python (oficiální stránky projektu)
    https://www.python.org/
  14. Jython
    http://www.jython.org/
  15. IronPython
    http://ironpython.net/
  16. Python 3.5.1 documentation
    https://docs.python.org/3/
  17. PyDev: Unittest integration
    http://mojefedora.cz/integrovana-vyvojova-prostredi-ve-fedore-pydev/
  18. Continuous unit testing with Pydev (Python and Eclipse)
    http://stackoverflow.com/questions/1015581/continuous-unit-testing-with-pydev-python-and-eclipse
  19. Test-driven development
    https://en.wikipedia.org/wiki/Test-driven_development