Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

IronPython + Eclipse

Ukazała się wersja release candidate IronPythona 2.7.2. Wydanie wersji stabilnej zaplanowano za tydzień. Jest to dobra okazja, by przyjrzeć się tej wersji Pythona, ponieważ wprowadzono w niej kilka istotnych nowości.

Kilka słów o IronPython

IronPython to pełnoprawna implementacja języka Python napisana w C#, zapewniająca pełną integrację z platformą .NET Framework i Mono. W porównaniu do podstawowej implementacji (CPython) charakteryzuje się:

  • dostępem do bogatych zasobów bibliotek standardowych .NET Framework
  • dostępem do zewnętrznych bibliotek dll dla .NET za pomocą modułu clr
  • wsparciem dla technologii Silverlight
  • brakiem Globalnej Blokady Interpretera (GIL), dzięki czemu aplikacje wielowątkowe wykorzystują możliwości procesorów wielordzeniowych
  • łatwą kompilacją plików py do samodzielnych plików exe (Tools\Scripts\pyc.py)
  • mniejszymi rozmiarami aplikacji w porównaniu do tych budowanych przy pomocy py2exe czy cx_freeze dla CPythona

Co nowego w IronPython 2.7.2?

Zmiana drugiej cyfry po przecinku wiąże się z wprowadzeniem kilku nowości. IronPython nie tylko umożliwia korzystanie z bibliotek .NET. Dostarczany jest wraz z nim duży zasób bibliotek standardowych znanych z CPython. Wśród nich można znaleźć m.in. moduły sys, os, re, math, thread, socket, itertools, email, xml.etree, a od niedawna również csv. Dzisiejsze wydanie roszerza zestaw o moduły zipimport oraz sqlite3.

Od tego wydania możliwe jest również budowanie samodzielnych aplikacji exe przy pomocy pyc.py, zawierających wszystkie niezbędne biblioteki, które wcześniej trzeba było kopiować do folderu z programem.

Ponadto wersja 2.7.2 wspiera .NET 3.5, .NET 4, Silverlight 4, Silverlight 5, Mono for Android 4.0 i Windows Phone 7.5.

Programowanie w IronPython

Programowanie w IronPython można rozpocząć zaraz po instalacji korzystając z interaktywnej konsoli dostępnej z poziomu menu Start. Przydatny będzie również jakikolwiek edytor kolorujący składnię języka Python. Bardziej wymagający programiści mogą skorzystać ze zintegrowanych środowisk programistycznych takich jak Visual Studio z pluginem Python Tools for Visual Studio lub Eclipse z wtyczką PyDev.

IronPython + Eclipse

Konfiguracja Eclipse jest bardzo prosta i sprowadza się do kilku kroków. W tym wpisie chciałbym głównie zwrócić uwagę na pewną kwestię dotyczącą stosowania zewnętrznych bibliotek dll.

Eclipse wymaga do działania Javy. Środowisko pobieramy w postaci pliku zip i wypakowujemy w dowolnym miejscu na dysku, a następnie uruchamiamy pliki eclipse.exe. Warto utworzyć skrót do tego pliku. Następnie instalujemy PyDev, wybierając z menu Help > Install New Software... (szczegóły instalacji dostępne na stronie projektu PyDev).

Kolejnym krokiem jest dodanie interpretera IronPython. Tworzymy nowy projekt wybierając z menu File > New > PyDev Project, a następnie zaznaczamy jako typ projektu IronPython i klikamy Click here to configure an interpreter not listed.

W oknie Iron Python Interpreters klikamy przycisk New, podajemy nazwę interpretera, np. IronPython 2.7.1 oraz wskazujemy plik ipy.exe (plik ten znajduje się w folderze C:\Program Files (x86)\IronPython 2.7.1, o ile nie zmieniono domyślnej lokalizacji podczas instalacji). Klikamy OK i mamy środowisko gotowe do pracy.

Korzystanie z zewnętrznych bibliotek

Korzystanie z bibliotek zewnętrznych omówię na przykładzie biblioteki iText, służącej do generowania dokumentów PDF. Wersję dla .NET można pobrać ze strony iTextSharp.

W pliku zip znajdziemy itextsharp.dll. Plik ten umieszczamy w dowolnym miejscu na dysku.

UWAGA

Nazwa pliku itextsharp.dll jest inna niż przestrzeń nazw wykorzystywana w języku C#.

using iTextSharp.text; using iTextSharp.text.pdf;

Aby możliwe było korzystanie z biblioteki w IronPythonie należy zmienić nazwę pliku dll na taką jaka wykorzystywana jest przy jej importowaniu!

W tym przypadku nazwę należy zmienić na iTextSharp.dll. Powracamy do okna Iron Python Interpreters i podajemy lokalizację biblioteki wskazując folder, w którym się ona znajduje. Zatwierdzamy zmiany i ponownie uruchamiamy Eclipse.

Czas przetestować bibliotekę. W tym celu dodajemy nowy plik projektu (PyDev Module) i wklejamy poniższą zawartość:

# -*- coding: utf-8 -*- from System.IO import FileStream, FileMode import clr clr.AddReferenceToFileAndPath('iTextSharp.dll') from iTextSharp.text import Document from iTextSharp.text import Paragraph from iTextSharp.text import Font from iTextSharp.text.pdf import PdfWriter from iTextSharp.text.pdf import BaseFont bfVerdana = BaseFont.CreateFont('C:\Windows\Fonts\Verdana.ttf', BaseFont.IDENTITY_H, True) verdana = Font(bfVerdana, 12, Font.ITALIC) document = Document() PdfWriter.GetInstance(document, FileStream('itest.pdf', FileMode.Create)) document.Open() document.Add(Paragraph('Ten blog jest żółty!', verdana)) document.AddAuthor('Krystian') document.Close()

Przy okazji podany został przepis na prawidłowe wyświetlanie m.in. polskich znaków w plikach PDF generowanych przy pomocy iTextSharp.

Miłego kodowania! 

programowanie hobby

Komentarze

0 nowych
revcorey   7 #1 04.03.2012 19:22

ogólnie ciekawostką odnośnie jythona i ironpython jest możliwość użycia przez ten drugi bibliotek w C.
" However, it is technically feasible to support such extensions, as demonstrated by IronPython. For the next release of Jython, we plan to support the C Python Extension API."

O ile znalazłem info o jython iż chcą w przyszłości migrować na python 3.0 to o ironpython nic nie widziałem.

iluzion   5 #2 04.03.2012 19:42

@revcorey

Nie śledzę rozwoju Jythona, ale nie jest on chyba zbyt szybki. Aktualna wersja Jythona jest zgodna z Pythonem 2.5, podczas gdy IronPython jest zgodny z Pythonem 2.7. Wielu programistów i firm dopiero teraz przechodzi na 2.7. Google wydało Google App Engine dla Pythona 2.7 w tym tygodniu:

http://googleappengine.blogspot.com/2012/02/announcing-general-availability-of.html

IronPython 3 jest planowany. Jedynie taka informacja się znajduje na stronie projektu http://ironpython.codeplex.com/releases/view/62995. Wydaje mi się, że gdzieś widziałem nieco więcej na ten temat. Na pewno na listach mailingowych toczą się dyskusje.

revcorey   7 #3 04.03.2012 20:05

Jeśli idzie o google to oni przy okazji premiery python 3 zapowiedzieli że nie przejdą a przynajmniej w najbliższej przyszłości.
Jeśli idzie o jython 2.5, chcą przeskoczyć do 2.6 lub 2.7 ale chyba im sił brak tzn. wierzbicki przez 1,5 roku poświęcał mało czasu ale wraca powoli ponoć. Ale skoro google przeskakuje do 2.7 to myślę że oni niedługo też. Oni mieli już 2 lata temu przeskoczyć do 2.7
Jeśli idzie o ironpython to w necie wyczytałem że coś z 3 powprowadzali do 2.7 tak żeby mieć bazę do przeskoku.

revcorey   7 #4 04.03.2012 20:08

A ironpython miał to szczęście że swego czasu ms bardzo ich wspierał obecnie z tego co czytałem dali sobie spokój i to tak naprawdę oni wprowadzili 2.7(wersję alha), podejrzewam że bez nich jest zastój i na 3 trzeba będzie sporo poczekać.

iluzion   5 #5 04.03.2012 21:38

@revcorey

Informacja o porzuceniu IronPython i IronRuby pojawiła się nawet na tym vortalu:

http://www.dobreprogramy.pl/Microsoft-porzuca-jezyki-IronRuby-i-IronPython,Aktua...

Microsoft na pewno miał duży wpływ na rozwój IronPythona i DLR, ale obecny team chyba sobie radzi, bo za tydzień zostanie wydana trzecia stabilna wersja od czasu pojawienia się tej informacji. Każda wersja wnosi sporo zmian, więc trudno mówić o zastoju. Podobnie wygląda sprawa z Python Tools for Visual Studio (luty 2012):

New in PTVS 1.1 [Released Feb 2012]
Add Import
Remove Imports
isinstance type inference
Project references (C extension modules or .NET DLLs)
Automatic IPython Inline graphs
Pyvot: A Python to/from Excel connector!
PyKinect: Write Kinect games with Python!
Over 150 bug fixes & new features based on your feedback

revcorey   7 #6 05.03.2012 16:58

RaveStar, ironpython kompatybilny jest z mono, tylko że z jednym ale mono nie ma wszystkiego co ma .NET. Czyli przenośność do pewno stopnia jest.

iluzion   5 #7 05.03.2012 17:07

@RaveStar

Nic nie rozumiesz. Pełnoprawna implementacja oznacza, że kod jest przenośny i może być uruchomiony pod dowolną inną implementacją Pythona. Ponadto IronPython dostarcza już większość biblioteki standardowej CPythona. Możliwość korzystania z .NET to tylko (lub aż) opcja, które znacznie rozszerza możliwości. Nie wspominając o Mono i możliwości uruchomienia kodu pod Linuksem, Androidem itd.

@revcorey

Wywołałeś wilka z lasu...

http://fwierzbicki.blogspot.com/2012/03/adconion-to-fund-jython-27.html

revcorey   7 #8 05.03.2012 17:18

"Wywołałeś wilka z lasu... "
Pythona a nie wilka :D

revcorey   7 #9 05.03.2012 17:25

a na blogu wierzbickiego taka ciekawostka
http://strattonbrazil.blogspot.com/2011/08/performance-gains-in-jython-252.html
czyli pypy kopie tyłki wszystkim :P