Python, virtualenv i pip

Data publikacji: 2012-11-26 | Tagi:

Nie będę się tutaj rozwodził nad tym, jak bardzo wygodnym narzędziem jest python, bo nie taki jest cel tego artykułu. Moim zadaniem jest przybliżenie pakietu virtualenv, który łatwość korzystania z pythona wnosi na zupełnie nowy poziom.

Co to jest virtualenv?

Aby dobrze wyjaśnić do czego służy ten pakiet posłużę się przykładem. Załóżmy, że mam w perspektywie prace konserwacyjne i rozwojowe nad dwiema stronami internetowymi. Jedna to bardzo duży i rozbudowany projekt pracujący na Django w wersji 1.2.6. Druga to stosunkowo młody i niewielki projekt oparty na Django 1.4.2. Prace powinny być prowadzone równolegle - wiadomo terminy gonią. Każdy z tych projektów ma inną listę pakietów zależnych, a dodatkowo powtarzające się pakiety występują nierzadko w różnych wersjach (chociażby Django).

Co zrobić, żeby ułatwić sobie pracę z tymi dwoma projektami jednocześnie? Zastosować virtualenv, który jest narzędziem tworzącym i zarządzającym wirtualnymi środowiskami pythona. Oznacza to między innymi, że mogę mieć dowolną ilość środowisk wirtualnych, każde z innymi wersjami pakietów przeznaczonych tylko dla danego projektu.

Brzmi nieźle, a zatem...

Virtualenv w praktyce

Instaluję pakiet virtualenv z repozytoriów systemu operacyjnego:

sudo aptitude install python-virtualenv

Tworzę katalog z moimi projektami:

cd ~/
mkdir projekty
cd projekty

Tworzę dwa oddzielne środowiska wirtualne:

virtualenv --no-site-packages projekt1
virtualenv --no-site-packages projekt2

Przełącznik --no-site-packages odpowiada za "czyste" środowisko wirtualne, tzn. za środowisko bez dowiązań do już istniejących w systemie pakietów oprogramowania pythona. W efekcie kończę z dwoma gotowymi do pracy środowiskami.

Czas zainstalować jakieś pakiety.

Dla pierwszego projektu zainstaluję Django 1.2.6, a dla drugiego Django 1.4.2. Zakładając, że jestem nadal w katalogu projekty:

source ./projekt1/bin/activate
pip install pip --upgrade
pip install django==1.2.6
deactivate
source ./projekt2/bin/activate
pip install pip --upgrade
pip install django==1.4.2
deactivate

Wytłumaczenie tego linijka po linijce:

  • Przełącz się na środowisko wirtualne o nazwie projekt1 - wszystkie akcje instalacji i korzystania z pakietów, będą dotyczyły tylko tego środowiska.
  • Przy pomocy pip zainstaluj najnowszą (--upgrade) wersję pip dla środowiska projekt1.
  • Zainstaluj pakiet Django w określonej wersji dla środowiska projekt1.
  • Przestań korzystać ze środowiska projekt1 jako domyślnego.
  • Przełącz się na środowisko wirtualne o nazwie projekt2 - wszystkie akcje instalacji i korzystania z pakietów, będą dotyczyły tylko tego środowiska.
  • Przy pomocy pip zainstaluj najnowszą (--upgrade) wersję pip dla środowiska projekt2.
  • Zainstaluj pakiet Django w określonej wersji dla środowiska projekt2.
  • Przestań korzystać ze środowiska projekt2 jako domyślnego.
Korzystanie ze środowisk virtualenv

Środowisko włączam poleceniem:

source /sciezka/do/srodowiska/bin/activate

a wyłączam poleceniem

deactivate

Pakiety instaluję poleceniem pip install, a odinstalować je mogę poleceniem pip uninstall. Dodatkowo, jeśli dany pakiet jest już zainstalowany, a chcę zainstalować jego najnowszą wersję wydaję polecenie:

pip install nazwa-pakietu --upgrade

A jeśli chcę zainstalować konkretną wersję:

pip install nazwa-pakietu==0.1.3
Klonowanie środowisk

Załóżmy, że projekt nad którym pracuję ma w efekcie znaleźć się na nowym serwerze. Z virtualenv jest to łatwe. Na maszynie developerskiej wykonuję następujące kroki:

  1. Aktywuję środowisko.
    source ./projekt2/bin/activate
    
  2. Tworzę listę zainstalowanych pakietów.
    pip freeze > /tmp/requirements.txt
    
  3. Wysyłam listę na docelowy serwer.

Na serwerze docelowym po zainstalowaniu i aktywowaniu virtualenv wydaję polecenie:

pip install -r requirements.txt

Spowoduje to odczytanie listy pakietów z pliku requirements.txt i zainstalowanie ich w aktywnym środowisku.

Szybszą metodę tworzenia gotowego środowiska dla danego projektu naprawdę trudno sobie wyobrazić.

Na zakończenie

Powinienem jakoś podsumować korzystanie z virtualenva, więc może po prostu napiszę - warto. Tak samo jak warto krzystać z ipythona czy pipa - są to po prostu naprawdę wygodne narzędzia, bez których praca trwałaby dłużej i przysparzała wielu niepotrzebnych frustracji - do tej grupy mogę śmiało zaliczyć virtualenv.


Oceń ten post:
Podziel się:

comments powered by Disqus

IT w obrazkach: