Python
From Rootnode
Contents |
Wirtualne środowiska Pythona
Na Rootnode nie ma dostępnych wszystkich bibliotek Pythona, ale w razie potrzeby doinstalowania jakiejś biblioteki można skorzystać z wirtualnego Pythona za pomocą opisanych poniżej narzędzi.
Istnieje możliwość utworzenia drzewa modułów dla Pythona. Lokalne moduły i dodatki do Pythona są dostępne w naszej własnej strukturze katalogów, natomiast lokalne składniki są podlinkowane do właściwych plików znajdujących się w systemowym drzewie.
virtualenv
Virtualenv to stworzone przez Iana Bickinga narzędzie służące do tworzenia odizolowanych środowisk Pythona. Virtualenv jest następcą workingenv oraz rozszerzeniem dla virtual-pythona.
Przygotowanie
Tworzenie wirtualnego środowiska sprowadza się do wykonania poniższego polecenia:
$ virtualenv ENV
ENV to bezwzględna ścieżka do katalogu w którym zostanie zainstalowane wirtualne środowisko. Lokalizacja jest dowolna (wyjątek stanowi deployment z użyciem skryptów CGI), a ilość posiadanych przez nas środowisk jest (teoretycznie) nieograniczona.
Należy zwrócić uwagę na to, że tak stworzone wirtualne środowisko korzysta z globalnego Pythona (obecnie jest to wersja 2.4). Jeżeli chcemy skorzystać z nowszego Pythona dodajemy odpowiedni parametr:
$ virtualenv -p python2.6 ENV
Możemy także stworzyć środowisko bez systemowych (standardowych) pakietów, co może być przydatne w przypadku konfliktów wersji instalowanych paczek:
$ virtualenv --no-site-packages ENV
Użycie
Tak powstałe środowisko możemy wykorzystać na trzy sposoby.
- Najprostszym z nich jest aktywacja:
[bongo@stallman ~]$ source ENV/bin/activate (ENV)[bongo@stallman ~]$
Proszę zwrócić uwagę na to, że poprawna aktywacja skutkuje w poprzedzeniu znaku zachęty (prompta) nazwą środowiska.
Aktywację musimy wykonać za każdym razem kiedy chcemy skorzystać z wirtualnego Pythona
Od teraz wykonując python będziemy uruchamiać interpreter z naszej lokalnej konfiguracji, oraz będzie można swobodnie instalować nowe moduły i dodatki, które będą dostępne tylko dla nas!
Razem z virtualenv instalowany jest pakiet Setuptools, dzięki czemu w bardzo prosty sposób możemy doinstalowywać nowe paczki, np:
(ENV)$ easy_install pip
Kiedy zakończyliśmy już pracę z naszym wirtualnym Pythonem, możemy środowisko wyłączyć:
(ENV)$ deactivate
- Możemy także bezpośrednio instalować biblioteki przy pomocy easy_install:
$ ENV/bin/easy_install pip
- A skrypty uruchamiane przy pomocy "naszego" interpretera będą z tych bibliotek korzystać
$ ENV/bin/python skrypt.py
virtualenvwrapper
Virtualenvwrapper to stworzone przez Douga Hellmanna narzędzie to zarządzania wirtualnymi środowiskami. Przydatne zwłaszcza wtedy, gdy pracujemy na większej ich ilości. Więcej informacji znajdziemy na oficjalnej stronie virtualenvwrappera
Deployment aplikacji sieciowych
Jeżeli chcemy serwować swoje skrypty w sieci mamy kilka rozwiązań. Oczywiście każde ma swoje plusy i minusy, które po krótce postaramy się omówić.
mod_wsgi
Obecnie, preferowaną metodą serwowania skryptów Pythona na Rootnode jest moduł Apache'a - mod_wsgi. Pamiętajmy, aby wszystkie nasze działania miały miejsce w strukturze katalogów ~/www.
Tworzymy w wybranym katalogu plik .htaccess:
AddHandler wsgi-script .wsgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ aplikacja.wsgi/$1 [QSA,PT,L]
Niestety, szybkość i niezawodność tej metody obarczona jest wymaganiem korzystania z globalnego Pythona, w wersji 2.4.
W przypadku brakujących paczek można poinformować WSGI o tym, gdzie zostały one przez nas zainstalowane (katalog site-packages w wirtualnym środowisku) dodając następujące linie na samym początku skryptu WSGI:
import sys
import site
# Remember original sys.path.
prev_sys_path = list(sys.path)
# Add new site-packages directory.
site.addsitedir('ENV/lib/python2.4/site-packages')
# Reorder sys.path so new directories at the front.
new_sys_path = []
for item in list(sys.path):
if item not in prev_sys_path:
new_sys_path.append(item)
sys.path.remove(item)
sys.path[:0] = new_sys_path
|
Tak dodane pakiety powinny być instalowane na wirtualnym środowisku z Pythonem zgodnym (pod względem wersji) z Pythonem globalnym (obecnie Pythonem 2.4). W innym wypadku powinniśmy się liczyć z niepożądanym działaniem naszej aplikacji. |
Więcej informacji o powyższym sposobie znajdziemy na stronach oficjalnej dokumentacji mod_wsgi.
mod_fastcgi
Zaletą tego rozwiązania jest, dowolność w wyborze wersji interpretera, czyli przykładowo możemy skorzystać z Pythona 2.6. Instrukcje znajdziemy na stronach wiki dotyczących zewnętrznego serwera FastCGI.
mod_python
Możemy korzystać także z mod_python. Instrukcje i uwagi podobne co przy preferowanym mod_wsgi. Główna różnica to zawartość pliku .htaccess:
SetHandler python-program PythonHandler <handler.czyli.moduł.pythona> SetEnv <nazwa-zmiennej> <wartość-zmiennej> PythonDebug On
CGI
"Common gateway interface" to metoda uruchamiania skryptów, która niegdyś była najpopularniejszą, teraz wyparta przez nowsze/szybsze/bezpieczniejsze technologie. Prosimy używać z rozwagą!
- Do katalogu ze struktury www zawierającego skrypty Pythona dołączamy plik .htaccess:
Options +ExecCGI AddHandler cgi-script .py
- Pamiętajmy, że skrypty powinny rozpoczynać się od ścieżki do binarki pythona.
#!/usr/bin/env python
Zaletą korzystania z tego rozwiązania jest możliwość uruchamiania skryptów przez własny interpreter. Bez problemu możemy także skorzystać z własnego wirtualnego środowiska Pythona, pamiętając o tym, że wirtualne środowisko musi znajdować się w strukturze katalogów ~/www:
#!ENV/bin/python
Inne
W ostateczności, kiedy powyższe metody się nie sprawdziły, możemy uruchomić swój własny serwer (np. lighttpd na Torvaldsie), a następnie przekierować ruch www na port, na którym go uruchomiliśmy.
Frameworki webowe
Python to język, na którym zbudowano bardzo wiele, różnych frameworków. Oto najpopularniejsze:
Django
Django to najpopularniejszy i prawdopodobnie najlepszy framework webowy stworzony w Pythonie. Wszelkie informacje o Django dostępne są na stronie: Django
Zope
Zope to tzw. "duży" serwer aplikacji napisany w Pythonie. Informacje na temat uruchamiania Zope na Rootnode dostępne są na stronie: Zope

