Narzędzia programistyczne wspierające Pythona Niniejszy artykuł powstał jako rezultat moich poszukiwań narzędzi, które wspomagałyby programistę piszącego w Pythonie. Znalezione narzędzia testowałem na projekcie, który wraz z trzema innymi studentami pisałem w ramach pracy licencjackiej na wydziale informatyki Uniwersytetu Warszawskiego. Projekt ostatnio urósł do około 30 tys linii i w związku z tym programowanie z pomocą prostych narzędzi stawało się coraz trudniejsze. W ramach zajęć na uczelni poznałem wiele narzędzi dla Javy: skomplikowane i potężne IDE, programy do wyszukiwania bugów, do wyszukiwanie miejsc podejrzanych o zły styl programowania itp. W związku z tym chciałem przekonać się czy analogiczne narzędzia istnieją dla Pythona. Byłem też przygotowany, że ze względu na inną specyfikę języka i mniejszą popularność w dużych projektach, wynik może nie być zadowalający. Wszystkie znalezione programy są darmowe (innych nie szukałem), większość z nich można za darmo ściągnąć ze stosownych stron, chociaż niektóre wymagały pewnej pracy w dostosowywaniu do mojego projektu, podejrzewam, że podobnie będzie w przypadku innych. Stąd dodatkiem do artykułu jest plik .zip z lekko zmodyfikowanymi wersjami narzędzi lub prostymi skryptami które pokazuję jak je stosować. Również w artykule sporo miejsca poświęciłem sprawom związanym z instalacją i ewentualnymi modyfikacjami omawianym programów. Wymagania wstępne: - Python 2.6, - MS Windows, - Jakiś program od rozpakowania archiwów *.zip. Część narzędzi, zwłaszcza tych tworzonych przez pojedynczych entuzjastów, działa też na starszych wersjach Pythona, zazwyczaj właśnie do nich były tworzone, natomiast ich praca w nowej wersji wymaga więcej pracy. Wszystkie omawiane programy powinny też działać pod Linux-em (poza Notepad-em++). 1. Skrót Wszystkie omawiane programy razem z linkami do ich stron oraz ewentualnym położeniem w załączonej paczce (pliku *.zip). Oprogramowanie które nie wymaga specjalnych modyfikacji nie zostało załączone w paczce, łatwiej je ściągnąć z Internetu. Nazwa programu Strona WWW Położenie w paczce Eclipse + Pydev http://www.eclipse.org/downloads/ http://pydev.sourceforge.net/updates/ Brak Notepad++ http://notepad-plus.sourceforge.net/uk/download.php Brak Pylint http://www.logilab.org/project/pylint Brak Pyflakes http://divmod.org/trac/wiki/DivmodPyflakes /pyflakes Pymetrics http://sourceforge.net/projects/pymetrics/ /pymetrics Statsvn http://www.statsvn.org/downloads.html /statsvn depgraph http://www.tarind.com/depgraph.html /depgraph Lumpy http://www.greenteapress.com/thinkPython/swampy/lumpy.html /lumpy 2. Edytory / IDE Praktycznie każdy język z popularnych języków programowania ma jedno lub więcej popularnych IDE, natomiast nie znalazłem takiego środowiska dla Pythona. Na pytanie o najlepszy edytor na forach zazwyczaj pojawiają się „standardowe” odpowiedzi, np. Emacs czy gedit, czyli programy które nie są łatwe do opanowania i/lub nie zapewniają bardziej zaawansowanych funkcji: podpowiadanie nazw czy kontrola poprawności kodu. Zapewne wynika to z mniejszej popularności oraz samej specyfiki języka Python: dynamiczny charakter i łatwość użycia refleksji utrudniają automatyczną interpretację czy refactoring. Dalej opisuję dwa najlepsze edytory które osobiście znalazłem. 2.1. Eclipse + Pydev Eclipse jest jednym ze standardowych IDE dla Javy, obsługuje też wiele wtyczek zarówno z dodatkowymi narzędziami dla Javy, jak i dającymi wsparcie dla innych języków.
12
Embed
Narzędzia programistyczne wspierające Pythona · 2010-11-27 · Narzędzia programistyczne wspierające Pythona Niniejszy artykuł powstał jako rezultat moich poszukiwań narzędzi,
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Narzędzia programistyczne wspierające Pythona
Niniejszy artykuł powstał jako rezultat moich poszukiwań narzędzi, które wspomagałyby programistę piszącego w
Pythonie. Znalezione narzędzia testowałem na projekcie, który wraz z trzema innymi studentami pisałem w ramach pracy
licencjackiej na wydziale informatyki Uniwersytetu Warszawskiego. Projekt ostatnio urósł do około 30 tys linii i w związku z tym
programowanie z pomocą prostych narzędzi stawało się coraz trudniejsze.
W ramach zajęć na uczelni poznałem wiele narzędzi dla Javy: skomplikowane i potężne IDE, programy do wyszukiwania
bugów, do wyszukiwanie miejsc podejrzanych o zły styl programowania itp. W związku z tym chciałem przekonać się czy
analogiczne narzędzia istnieją dla Pythona. Byłem też przygotowany, że ze względu na inną specyfikę języka i mniejszą
popularność w dużych projektach, wynik może nie być zadowalający.
Wszystkie znalezione programy są darmowe (innych nie szukałem), większość z nich można za darmo ściągnąć ze
stosownych stron, chociaż niektóre wymagały pewnej pracy w dostosowywaniu do mojego projektu, podejrzewam, że podobnie
będzie w przypadku innych. Stąd dodatkiem do artykułu jest plik .zip z lekko zmodyfikowanymi wersjami narzędzi lub prostymi
skryptami które pokazuję jak je stosować. Również w artykule sporo miejsca poświęciłem sprawom związanym z instalacją i
ewentualnymi modyfikacjami omawianym programów.
Wymagania wstępne:
- Python 2.6,
- MS Windows,
- Jakiś program od rozpakowania archiwów *.zip.
Część narzędzi, zwłaszcza tych tworzonych przez pojedynczych entuzjastów, działa też na starszych wersjach Pythona, zazwyczaj
właśnie do nich były tworzone, natomiast ich praca w nowej wersji wymaga więcej pracy. Wszystkie omawiane programy powinny
też działać pod Linux-em (poza Notepad-em++).
1. Skrót
Wszystkie omawiane programy razem z linkami do ich stron oraz ewentualnym położeniem w załączonej paczce (pliku *.zip).
Oprogramowanie które nie wymaga specjalnych modyfikacji nie zostało załączone w paczce, łatwiej je ściągnąć z Internetu.
Nazwa programu Strona WWW Położenie w paczce
Eclipse + Pydev http://www.eclipse.org/downloads/
http://pydev.sourceforge.net/updates/
Brak
Notepad++ http://notepad-plus.sourceforge.net/uk/download.php Brak
Narzędzie Lumpy , w oryginalnej wersji, służy do tworzenia diagramów obiektów i klas w notacji zbliżonej do UML.
Tworzenie diagramów obiektów dla dużych projektów tworzy bardzo złożone i nieczytelne obrazy, podobnie staje się gdy próbuje
się zaznaczyć pola i metody obiektów. Stąd wersja umieszczona w załączonej paczce wypisuje tylko i wyłącznie diagramy klas z
nazwami klas i strzałkami które oznaczają dziedziczenie.
Niestety utworzenie diagramu klas wymaga zaimportowania interesujących nas modułów. Czasami powoduje to niechciane skutki
uboczne, jeśli w modułach ktoś umieścił statyczny kod uruchamiany przy imporcie.
Załączony moduł do_lumpy.py ma możliwość stworzenia diagramu dla zadanego (w kodzie) modułu, lub zbioru modułów, dla
całego pakietu (katalogu). Wystarczy zastąpić wpisany tam jako przykład pakiet lumpy ścieżką do interesującego nas katalogu.
Można też ręcznie zaimportować wybrane moduły (from moduł import *), wówczas lumpy wypisze tylko klasy z tych modułów
oraz ich nadklasy itd. Ważne jest aby uczynić to pomiędzy odwołaniami do lumpy.make_reference() oraz lumpy.class_diagram().
Jeśli chcemy zobaczyć też pola i metody zdefiniowane w klasach, należy zastąpić plik w module lumpy przez te dostarczone przez
Ilustracja 9: Niestety po zmianach w strukturze pakietów uzyskaliśmy trochę sierot, widać je w rządku po lewej u góry, żadne próby zmuszenia depgraph-a do ich
połączenia nie pomogły.
Ilustracja 10: A oto graf przykładowy ze strony autorów, widać że im też nie wszystko się do końca udało.
autorów (ich kopia znajduje się w katalogu oryginal_lumpy). Można też zmienić tylko nazwę pakietu importowanego na początku
pliku do_lumpy.
Funkcjonalności:
- Rysuje hierarchię dziedziczenia klas,
- Ma możliwość zaznaczania pól i metod w klasach,
- Ma możliwość rysowania diagramu obiektów w danym momencie działania programu.
Instalacja/użycie:
- Zmodyfikować plik do_lumpy.py zgodnie z zaleceniami powyżej,
- Uruchomić go przez:
python do_lumpy.py
- Powinno utworzyć się graficzne okno w którym możemy poprawić ręcznie otrzymany diagram, tak żeby
wizualnie lepiej wyglądał,
- Wpisujemy nazwę pliku w lewym górnym rogu i zapisujemy plik.
Zapisane diagramy dobrze nadają się do dokumentacji technicznej projektu, ułatwiają też wstępne zorientowanie się w kodzie. Za
pomocą diagramu obiektów można by próbować stworzyć wizualny debugger, o ile projekt jest wystarczająco prosty (mój był o
rzędy wielkości za duży).
Przykładowy screen z okienka graficznego:
Ilustracja 11: do_lumpy uruchomiony na samym lumpy.
6. Podsumowanie
Jak się okazało i co pewnie widać z tego artykułu, narzędzia dla Pythona co prawda istnieją, ale większość z nich jest albo niezbyt
dopracowana (np. depgraph) albo są to dawno zapomniane i nie wspierane projekty (np. depgraph, Pymetrics itd.). Aktywne są
na pewno statsvn, Pydev i Pylint.
Każdy z wymienionych programów pomaga w zarządzaniu projektem tworzonym w Pythonie, ale brakuje jednego dużego
środowiska które by udostępniało wszystkie te funkcjonalności w przystępny sposób. Wydaje mi się, że największe nadzieje rokuje
PyDev + Pylint, zwłaszcza że narzędzia te i tak potrafią już analizować kod źródłowy w Pythonie. Dołożenie do nich dodatkowych
funkcjonalności graficznej reprezentacji zależności w kodzie czy też mierzenia metryk nie powinno być aż tak dużym problemem.
Pewnym ograniczeniem jest tu konieczność dostosowania się do środowiska Eclipse, ale być może da się stworzyć wtyczkę do
wtyczki (czyli do PyDev-a) i w ten sposób rozszerzyć ich funkcjonalność bez konieczności ingerencji w istniejący projekt.