Virtualne środowisko pythona. Python VirtualEnv.

Image - python-logo.pngCzy konieczna jest instalacja wirtualnego środowiska by pracować z pythonem?

Odpowiedź na to pytanie zaczniemy od końca. Potrzebne jest środowisko (interpreter pythona) dla odpowiedniej wersji pythona, by móc uruchamiać i testować swoje programy. Nie jest wymagana instalacja pythona poprzez wirtualne środowisko, ale rozwiązanie to może mieć wiele zalet. Często tworzymy rozwiązania wykorzystując określoną wersję pythona. Korzystając z usług firm hostingowych, mamy wysokie prawdopodobieństwo, iż firma ta udostępnia nam serwery wykorzystując darmowy system operacyjny CentOS, lub jego komercyjną wersję w formie OS RedHat. W systemach tych python domyślnie (w chwili pisania artykułu) ma wersję 2.6.

Zakładamy, iż tworząc oprogramowanie w pythonie będziemy chcieli skorzystać z jakichś dodatkowych bibliotek. Wyjścia są dwa, lub trzy.

  1. Prosimy firmę hostingową o doinstalowanie dodatku i firma nam doinstaluje potrzebną paczkę.
  2. Mamy możliwość konfiguracji wirtualnego środowiska i korzystając z easy_install lub pip doinstalowujemy sobie dodatek.
  3. Piszemy własne rozwiązanie, lub staramy się odpowiednio dołączyć bibliotekę ręcznie do naszego kodu.

W przypadku, jeśli Twoja firma hostingowa zgodzi się na wykonanie aktualizacji – zastanowiłbym się nad jej zmianą. Często w nowych bibliotekach nie zachowana jest kompatybilność wstecz i aktualizacja jakiegokolwiek pakietu, mimo iż w Twoim przypadku okazała się skuteczna – może niekorzystnie wpłynąć na działanie usługi innego klienta. Co jeśli tak owa zmiana zostałaby wprowadzona na prośbę innego klienta – nie naszą?

Wirtualne środowisko python zatem niesie ze sobą dodatkową korzyść. Na jednej usłudze hostingowej, lub systemie operacyjnym możemy mieć kilka środowisk deweloperskich, bądź produkcyjnych. Według mnie jest to ogromna zaleta, która pomaga chociażby w migracji do nowszych wersji określonych pakietów.

Dla przykładu wyobraźmy sobie, że korzystamy z frameworka Django. Pojawiła się nowa wersja tego frameworka. Co należy wykonać?

  1. Czytamy dokumentację (oczywiście wiele osób pomija ten krok i zaczynają od pkt. 2)
  2. Tworzymy sobie środowisko developerskie dla nowej wersji.
  3. Kopiujemy nasz projekt.
  4. Konfigurujemy by korzystał z naszego nowego środowiska.
  5. Instalujemy niezbędne dodatki, które też może okazać się że zostały zaktualizowane.
  6. Wykonujemy poprawki, które sprawią, iż nasz projekt będzie kompatybilny z nową wersją bibliotek.
  7. Testujemy.
  8. Publikujemy i pielęgnujemy rozwiązanie.

Tu również plan jest nieco uproszczony, jak również być może subiektywną wersją autora.

Jak widać środowisko virtualne nie tylko pozwoli nam dokonać upgrade'u i testów naszego projektu, lecz również będzie furtką w przypadku problemów do powrotu do starszej, stabilnej wersji rozwiązania.

Jak zainstalować wirtualne środowisko? (python virtual environment)

  1. Instalujemy paczkę python-virtualenv
    1. Centos
      1. yum install python-virtualenv
    2. Ubuntu
      1. apt-get install python-virtualenv
  2. Tworzymy katalog na nasze środowisko wirtualne
    1. Na potrzeby uruchomienia archiwalnego projektu zainstalujemy starszą wersję django 1.2
      1. mkdir /home/mtechnology/sys/venvs/py26dj12
  3. Instalujemy wirtualne środowisko python dla wersji python2.6
    1. virtualenv -p python26 /home/mtechnology/sys/venvs/py26dj12
      1. Podczas instalacji otrzymaliśmy błąd (Ubuntu 14.04)
        1. The executable python26 (from --python=python26) does not exist
      2. Co oznacza, że nie mamy wykonywalnej wersji interpretera python dla wersji python26 – w Ubuntu wersja interpreterów ma w nazwie kropkę tj. python2.6
    2. virtualenv -p python2.6 /home/mtechnology/sys/venvs/py26dj12
      1. Otrzymujemy:
        Running virtualenv with interpreter /usr/bin/python2.6
        New python executable in /home/mtechnology/sys/venvs/py26dj12/bin/python2.6
        Also creating executable in /home/mtechnology/sys/venvs/py26dj12/bin/python
        Installing setuptools, pip...done.
    3. Wirtualne środowisko jest gotowe. Teraz musimy je uruchomić (aktywować) i możemy przejść do instalacji odpowiednich dodatków.
  4. Aktywacja wirtualnego środowiska python
    1. . /home/mtechnology/sys/venvs/py26dj12/bin/activate
      Ważna jest sekwencja „kropka spacja”, która probuje uruchomić wykonywalny skrypt activate.
      W efekcie otrzymamy w naszym terminalu:
      (py26dj12)mtechnology@mtechdellm4600:~$
      Oznacza to, iż środowisko jest aktywne.
    2. Teraz za pomocą narzędzi pip / easy_install instalujemy niezbędne składniki jak np. django1.2
  5. Instalacja składników środowiska za pomocą pip/easy_install
    1. By zainstalować konkretną wersję środowiska należy użyć znaków ==
    2. easy_install Django==1.2
      Nastąpi wyszukanie i instalacja frameworka Django w wersji 1.2
      Searching for Django==1.2 Reading https://pypi.python.org/simple/Django/
      Best match: Django 1.2 Downloading https://pypi.python.org/packages/source/D/Django/Django-1.2.tar.gz#md5=98fa833fdabcdd78d00245aead66c174 Processing Django-1.2.tar.gz
      Writing /tmp/easy_install-w81099/Django-1.2/setup.cfg Running Django-1.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-w81099/Django-1.2/egg-dist-tmp-d90qzS warning: no files found matching '*' under directory 'examples' zip_safe flag not set; analyzing archive contents... django.utils.version: module references __path__ django.utils.autoreload: module references __file__
      django.utils.module_loading: module references __path__
      ....
      django.test._doctest: module MAY be using inspect.getsourcefile
      Adding Django 1.2 to easy-install.pth file Installing django-admin.py script to /home/mtechnology/sys/venvs/py26dj12/bin Installed /home/mtechnology/sys/venvs/py26dj12/lib/python2.6/site-packages/Django-1.2-py2.6.egg
      Processing dependencies for Django==1.2
      Finished processing dependencies for Django==1.2
logo python centos logo logo ubuntu