Narzedzia programistyczne wspierajace Pythona,
[ Pobierz całość w formacie PDF ]
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
Brak
Notepad++
Brak
Pylint
Brak
Pyflakes
/pyflakes
Pymetrics
/pymetrics
Statsvn
/statsvn
depgraph
/depgraph
Lumpy
/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.
W szczególności programiści Pythona powinni spróbować użyć wtyczki Pydev, która daje całkiem dobre wsparcie dla tego właśnie
języka. Pełny spis funkcjonalności jest przedstawiony na stronie domowej projektu, jego skrót przedstawiam poniżej:
Funkcjonalności:
- Debugger analogiczny jak ten dla Javy, ale nie ma możliwości ustawienia breakpointu na wyjątku,
- Szybkie wyszukiwanie plików i napisów (np. nazw klas, skróty Ctrl + H, Ctrl + Shift + R),
- Podpowiadanie nazw metod i pól w klasach, nazw zmiennych, klas w modułach itd. Niestety podpowiadanie
nie wydaje się bardzo wyszukane, podaje tylko te nazwy co do których jest pewność, że są zdefiniowane. (skrót
Ctrl + Spacja),
- Analogiczne wsparcie dla Jython-a,
- Podkreślanie składni, automatyczne wykrywanie błędów składniowych, opcje do porządkowania plików
zawierających spacje i tabulatory,
- Automatyczne wcinanie kodu, zgodnie ze składnią,
- Zarządzanie pakietami i projektami, możliwość łączenia z innymi wtyczkami, np. Subclipse (wtyczka do SVN).
Sposób instalacji:
- Należy ściągnąć którąś z wersji Eclipse-a ze strony (wystarczy najprostsza/najmniejsza wersja),
- Rozpakować w wybranej lokalizacji, Eclipse nie wymaga instalacji,
- Uruchomić Eclipse-a, przez odpowiedni plik w podkatalogu \bin,
- Help -> Software Updates, Add site, dodać stronę PyDev-a (drugi link podany w tabelce),
- Dalej postępować zgodnie z instrukcjami, po instalacji można wybrać perspektywę PyDev, stworzyć nowy
projekt i zacząć pisać.
Przykładowy screen:
Ilustracja 1:
Mimo wszystko lepiej jest mieć szeroki ekran.
Uwagi:
- Im mniej refleksji w kodzie, tym lepiej Pydev ( i pozostałe narzędzia) działają,
- Dalej jeszcze opiszę połączenie Pydev-a i Pylint-a.
2.2. Notepad ++
Nie jest to IDE, raczej zaawansowany edytor. Ale ma za to wsparcie dla bardzo dużego zbioru języków i działa na starszym
sprzęcie o niższych parametrach. Bardzo dobry wybór dla osób które nie chcą pracować w złożonym i zasobożernym IDE, lub jako
substytut Notatnika.
Funkcjonalności:
- Wsparcie dla wcięć i kolorowanie składni,
- Auto uzupełnianie, chociaż znacznie słabsze niż w Pydev-ie,
- Zakładki z wieloma otworzonymi plikami,
- Wyszukiwanie tekstu w wielu plikach, np. w całym drzewie projektu,
- Wsparcie również dla innych języków, edytor przydatny nawet jeśli ma się też Eclipse-a, do szybkiej edycji
różnych plików.
Sposób instalacji:
- Ściągnąć i uruchomić instalator ze strony domowej projektu,
- Doradzam wybór pełnej integracji z Explorerem Windows, daje to opcję otworzenia Notepada++ w menu
kontekstowym po naciśnięciu prawego przycisku na pliku.
Przykładowy screen:
3.
Kontrola jakości i poprawności kodu
W idealnym przypadku samo IDE po zauważeniu literówki czy też poważniejszego błędu powinno grzecznie :) uprzedzić
programistę że jego wytwór może nie zadziałać. Dla Javy to dość często się udaje, Eclipse z paroma sprytnymi wtyczkami potrafi
znajdować takie problemy, że programista nierzadko sam nie wpadł by na to że taki bug mógłby wystąpić. Oczywiście, w wielu
przypadkach to podpowiadanie jest przesadzone, ale zazwyczaj warto się nad takimi miejscami zastanowić. Dla Pythona takim
wykrywaczami podejrzanych fragmentów są dwa omówione niżej programy. Trzecim jest Pychecker, ale ja osobiście go nie
testowałem.
3.1 Pylint
Nazwa Pylint nawiązuje do programu lint który spełniał podobną rolę dla języka C, jakieś 30 lat temu. Narzędzia tego można
używać na dwa sposoby, albo jako niezależny program służący do testowania wybranych zbiorów plików ( tak jak programy
opisywane dalej), albo można go podłączyć do PyDev-a.
Ja osobiście wypróbowałem drugi sposób.
Funkcjonalności:
- Wyszukuje podstawowe błędy programistyczne, np. literówki,
- Wyszukuje też bardziej nietrywialne błędy i nakłania ostrzeżeniami do pisania bardziej czytelnego kodu,
zarówno pod względem wizualnym jak i logicznym.
Przykład błędu nietrywialnego:
Nie należy używać list jako parametrów domyślnych w metodach, bo taki
parametr wylicza się tylko raz i ewentualna jego modyfikacja może wpłynąć na działanie metody przy
kolejnym wywołaniu
- Zbiór ostrzeżeń można modyfikować, chociaż nie jest to zbyt wygodne,
- Wszystkie błędy/ostrzeżenia są zaznaczane przy odpowiadających im liniach w sposób standardowy dla
Eclipse-a,
- Błędy mają swoje kody i krótkie opisy, na stronie Pylint-a jest do nich instrukcja.
Sposób instalacji (Instrukcja instalacji zakłada posiadanie już Eclipse-a + PyDev-a):
- Ściągnąć Pylint-a ze strony do wybranego katalogu na dysku, rozpakować,
- Standardowo zainstalować Pylint-a jako bibliotekę za pomocą:
python setup.py
- Wejść w ustawienia Pydev-a (Window → Preferences → Pydev → Pylint),
- Włączyć Pylint-a i podać ścieżkę do niego ścieżkę,
- Pylint powinien zacząć działać po przebudowaniu projektu.
Krótki help na stronie Pydev-a:
Powyższy help wspomina głównym problemie z używaniem Pylint-a - działa on raczej wolno. Dla domyślnych ustawień po
zapisaniu jakiegokolwiek pliku Eclipse-a praktycznie się zawiesza na chwilę, jeśli sprawdzany projekt jest w miarę duży. Jeśli
używamy SVN-a i nagle zmieni nam się wiele plików, to proces sprawdzania właściwie nie kończy się w rozsądnym czasie. Help
opisuje jak sobie z tym radzić, dodatkowo można spróbować używać opcji „Only analyze open editors” w sekcji Builders.
Dodatkową wadą Pylinta jest to, że nie widać czy już skończył analizę, jedynym wyznacznikiem jest fakt pojawienia się nowych
błędów/ostrzeżeń.
Drugą wadą/zaletą Pylinta jest zbytnie (jak na mój gust) „marudzenie” na temat stylu. W naszym projekcie na początku
używaliśmy tabów zamiast spacji, na co pylint zaznaczył ostrzeżeniem każdą linię i praktycznie zamordował wydajnościowo
Eclipse-a. To i inne denerwujące mnie ostrzeżenia wyłączyłem wpisując w okienko ustawień ciąg:
--indent-string=t --disable-msg="W0312" --disable-msg="C0322"
--disable-msg="C0103" --disable-msg="C0324" --disable-msg="C0301" --disable-msg="C0111"
--disable-msg="R0201" -–disable-msg="R0904" –disable-msg="R0903"
Dla projektów które bardziej dbają o styl, część z tych ustawień może być niepotrzebna, pozostałym może uda się oszczędzić
trochę czasu na szukaniu tych opcji. Polecam sprawdzenie na stronie Pylint-a co właściwie wyłączamy i wybrać zbiór optymalny
dla danego zastosowania.
Przykładowe screeny:
Ilustracja 3:
Czepia się, że self.image_code jest niezdefiniowany. A hasattr nie zauważył :).
Ilustracja 4:
A tu znowu parę warningów.
[ Pobierz całość w formacie PDF ]