Co to jest i co potrafi IronPython?
IronPython (IPY) to implementacja języka Python w środowisku CLR platformy .NET i Mono. W uproszczeniu jest to odmiana Pythona napisana w C# a nie w C jak standardowa wersja (CPython). Dostajemy tą samą składnię, czy bibliotekę standardową i możliwość wykonywania skryptów wszędzie tam gdzie dostępne jest Mono czy .NET. Na chwilę obecną dostępny jest IronPython 2.7 - celujący w zgodność z Pythonem 2.7.
W tym artykule postaram się przedstawić IronPythona osobom znającym Pythona, ale nie mającym styczności z platformą .NET, czy Mono.
IronPython nie jest (może nie być) w pełni kompatybilny z Pythonem na poziomie aplikacji. Podstawowa różnica to brak dostępu do wielu dodatkowych modułów Pythona (np. tych napisanych w C). Należy się też liczyć z tym, że złożone aplikacje jak np. framework Django, czy Trac nie będą działały pod IronPythonem. Z drugiej strony IronPython może używać bibliotek .NET (a tych jest bardzo dużo). Na poziomie implementacji IronPython nie posiada "Global Interpreter Lock" (GIL) przez co wielowątkowe aplikacje mogą używać wielu rdzeni procesora. Także łatwiej rozszerzać go w C#, gdyż typy C# mogą być bezpośrednio używane w IPY. Szczegóły techniczne tej implementacji opisano na wiki.python.org.
IronPython należący do rodziny .NET nie ogranicza swojej przydatności tylko do MS Windows. Bez problemu współpracuje z Mono i można używać go także na np. Linuksie. Jednym z opiekunów tego projektu jest Miguel de Icaza - twórca Mono.
Instalacja IronPython
W przypadku MS Windows pobieramy instalator z ironpython.net i gotowe. Dodatkowo można pobrać narzędzia do Visual Studio. W przypadku Linuksa jest to bardziej złożone. Po pierwsze musimy sprawdzić czy w repozytoriach dystrybucji znajdziemy IronPythona. Dystrybucje niezbyt zainteresowane Mono mogą być pozbawione potrzebnych nam pakietów. W przypadku np. Gentoo overlay mono zawiera ebuild dla przestarzałej wersji wykorzystującej jeszcze fepy (zepsuty ebuild). W ostateczności pozostaje nam pobranie paczki ZIP z ironpython.net i wywoływanie terminala IronPythona tak (zakładając że mamy już zainstalowane mono):#!/bin/sh
if [ "$1" = "--debug" ]; then
MONO_OPTIONS="--debug"
shift
fi
IRONPYTHONPATH=${IRONPYTHONPATH:+$IRONPYTHONPATH:}/usr/lib/python2.6
export IRONPYTHONPATH
/usr/bin/mono $MONO_OPTIONS /usr/lib/ironpython/ipy.exe -X:TabCompletion "$@"
Używanie IronPythona
Pod Linuksem /usr/bin/ipy czy ipy.exe bezpośrednio z paczki dają nam dostęp do interaktywnej konsoli (tak jak w Pythonie). "ipy" może także wykonywać skrypty o podanych ścieżkach.
Dla przykładu prosty skrypt Pythona.from datetime import datetime, timedelta
now = datetime.now()
past = now - timedelta(hours=4)
print past
A teraz dla przykładu wykorzystajmy jakąś bibliotekę .NET (plik dll). Dla przykładu wybrałem ExcelLibrary. Na stronie projektu widzimy przykład dla C#. Pobierając paczkę z najnowszą wersją biblioteki - ExcelLibrary.dll. Z tej biblioteki można skorzystać nawet pod Linuksem. Wystarczy Mono, IronPython i zmałpowany na składnię Pythona skrypt:
import clr
# załadowanie DLL
clr.AddReference("ExcelLibrary.dll")
from ExcelLibrary import SpreadSheet
workbook = SpreadSheet.Workbook()
sheet = SpreadSheet.Worksheet('Pierwszy Arkusz')
sheet.Cells[0,0] = SpreadSheet.Cell('abc')
workbook.Worksheets.Add(sheet)
workbook.Save('test.xls')
- Planeta IronPython
- IronPython in Action - strona książki
- Książki o IronPython w Empiku
Comment article