Wheel - nowy format pythonowych pakietów daje niezłe przyśpieszenie

Pakietom aplikacji Pythonowych rzucono koło ratunkowe, a dokładnie to format pakietów wheel. Pozwala on dystrybuować oprogramowanie w znacznie bardziej wygodny i efektywny sposób niż dotychczasowe rozwiązania. Opisany w kilku PEPach, jak i zaprezentowany na PyCon PL 2013.

Na pypi nie ma jeszcze pakietów wheel w jakiś użytecznych ilościach. Niemniej można wykorzystać lokalne repozytorium albo katalog pełen "kół" by np. szybko budować całego virtualenva przy odpalaniu budowania i testowania projektu (np. przy continuous integration).

Instalacja wheel

Będziemy potrzebować jednej z nowszych wersji pip i distribute (co opisano w dokumentacji). W starych virtualenvach i systemowych instalacjach wystarczy wykonać:

pip install --upgrade pip distribute
Następnie można zainstalować wheel:
pip install wheel

Tworzenie wheeli

By zbudować wheele dla istniejących pakietów wystarczy wskazać docelowy katalog i nazwy pakietów:
pip wheel --wheel-dir=/katalog/na/wheele NAZWA_PAKIETU
Żeby zainstalować pakiety z lokalnie zbudowanych wheeli wystarczy wykonać:
pip install --use-wheel --no-index --find-links=/katalog/na/wheele NAZWA_PAKIETU
Mając lokalnie jakiś pakiet możemy zbudować wheel wykonując na setup.py:
python setup.py bdist_wheel
Działa to z distribute (ale nie z distutils). W efekcie dostaniemy pakiety whl, np:
Django-1.5.4-py2.py3-none-any.whl Pillow-2.2.1-cp27-none-linux_x86_64.whl
Pillow jako pakiet binarny ma w nazwie pliku architekturę, pod którą został skompilowany.

Dodatkowo dostajemy do dyspozycji narzędzie "wheel" pozwalające wykonywać operacje na pakietach (zobacz "wheel help").

Przyśpieszenie

Django nie wymaga kompilacji, ale instalacja nie jest momentalna. Z pominięciem pobierania pliku (pip install --no-install django) czas instalacji (pip install --no-download django) na moim komputerze wynosi:
real    0m3.109s
user    0m2.732s
sys    0m0.994s
Instalacja z wheela:
real    0m1.072s
user    0m0.763s
sys    0m0.308s
Dla Pillow kompilacja jest wymagana. Standardowo zajmuje:
real    0m11.265s
user    0m10.183s
sys    0m1.178s
Instalacja z wheela:
real    0m0.170s
user    0m0.135s
sys    0m0.035s
Nawet dla Django instalacja może być trochę szybsza. W przypadku pakietów binarnych gotowy wheel pozwala oszczędzić masę czasu. Gdy kluczowy jest krótki czas budowania całego projektu wheele mogą znacząco pomóc.
RkBlog

Podstawy Pythona, 21 October 2013

Comment article
Comment article RkBlog main page Search RSS Contact