Wirtualne środowisko pracy w Python, znane również jako virtualenv lub venv, jest sposobem za zapewnienie działania naszego programu niezależnie od maszyny na której jest uruchamiany ORAZ sposobem na uruchomienie innych programów na NASZEJ maszynie, tak aby instalowane z nią zależności nie zakłóciły pracy innych programów. W poniżej nauczymy się jak wykorzystywać wirtualne środowisko pracy w praktyce. Zaczynajmy!
Scenariusz do przemyślenia.
Na początku, zastanówmy się nad scenariuszem, który byłby trudny do rozwiązania bez koncepcji virtual environment, a potem wyjaśnimy co to dokładnie jest.
Otóż mamy do zainstalowania 2 programy. Jeden wymaga od nas biblioteki flask w bardzo konkretnej wersji x.03, natomiast drugi, flask w konkretnej wersji biblioteki flask x.04. Inaczej po prostu nie będą działały. Jeżeli za pomocą znanej nam komendy pip, zainstalujemy flask na potrzeby programu pierwszego, nie będzie działać drugi. Jeżeli zrobimy upgrade biblioteki flask do wersji wymaganej przez drugi program, to przestanie działać pierwszy.
Rozwiązanie.
To co rozwiązało by nasze problemy, to gdy byśmy mogli w jakiś sposób zainstalować wymaganą wersję biblioteki flask, dla programu 1 w taki sposób, aby była ona widoczna tylko dla niego. I tak samo zrobić dla programy drugiego.
Chcieli byśmy, móc stworzyć swojego rodzaju, wyizolowane środowisko pracy, dla programu pierwszego, gdzie zainstalujemy biblioteki na jego potrzeby, oraz wyizolowane, wirtualne środowisko pracy dla drugiego programu. Gdzie zainstalujemy jego biblioteki.
Jeżeli mieli byśmy taką możliwość, to potencjalnie za każdym razem gdy mieli byśmy uruchomić nowy program napisany w Python, mogli byśmy na jego potrzeby tworzyć nowe wirtualne środowisko, instalować w nim potrzebne dla nas biblioteki / zależności, po czym swobodnie uruchamiać nasz program, bez obaw, że instalując jego zależności, zepsujemy coś innego.
Tworzymy wirtualne środowisko pracy
Wirtualne środowisko pracy, jest swojego rodzaju odizolowanym katalogiem, zawierającym instalację języka programowania Python oraz zainstalowane biblioteki na potrzeby programu, który będziemy w nim uruchamiać.
Powiedzmy, że mamy katalog z naszym programem. Niech to będzie katalog o nazwie analityk, a w nim nasz program – helloWorld.py
Przechodzimy do naszego katalogu, po czym na potrzeby naszego programu, tworzymy wirtualne środowisko pracy, poleceniem:
$ python3 -m venv <nazwa środowiska>
co automatycznie utworzy nam nowe środowisko, i związaną z nim strukturę katalogów. Zobaczmy:
W tym przypadku utworzyliśmy wirtualne środowisko pracy o nazwie venv, co za tym idzie został utworzony katalog, też o tej nazwie i znajduje się on w naszym katalogu projektu analityk.
Uruchamiamy wirtualne środowisko pracy
Gdybyśmy w tym momencie zainstalowali jakąś bibliotekę, np poleceniem pip, to w dalszym ciągu została by ona zainstalowana 'globalnie’, a nie w ramach venv, gdyż środowisko jest stworzone, ale jeszcze nie jest uruchomione. Aby to zrobić, wykonujemy komendę:
$ source ./venv/bin/activate
zobaczmy:
Możemy łatwo rozpoznać, że w danym momencie znajdujemy się w wirtualnym środowisku, dzięki rozpoczęciu się linii komend od jego nazwy, znajdującej się w nawiasach. Wszystko inne działa i wygląda tak samo.
Instalujemy pakiety
Skoro już jesteśmy w naszym nowo stworzonym środowisku – venv – zainstalujmy przykładowy pakiet. Polecenia które będziemy wykonywać są dokładnie te same. Rożnica polega na tym, że instalowane przez nas pakiety, będą od momentu uruchomienia środowiska, poleceniem 'source’, instalowane w katalogach 'venv’, i dostępne dla programów, tylko z tego poziomu. Tym samym inne aplikacje, znajdujące się po za nim, nie będą ich widzieć.
Na początku, wyświetlmy listę pakietów które są zainstalowane w ramach wirtualnego środowiska:
$ pip list
Następnie, zainstalujmy pakiet flask:
$ pip install flak
Po czym,ponownie wyświetlmy listę zainstalowanych pakietów:
$ pip list
Tak jak widzimy, pip wyświetla informację że pakiet flask, jest zainstalowany. Możemy go również odszukać w katalogach naszego wirtualnego środowiska, a dokładnie tu:
$ ls ./venv/lib/python3.5/side-packages/
W tym momencie, możemy odwołać się do zainstalowanej biblioteki flask w naszym programie, poprzez standardowe polecenie 'import flask’,po czym w normalny sposób uruchomić nasz program, jednak w ramach naszego środowiska wirtualnego. Zobaczmy:
Kończymy pracę wirtualnego środowiska
Doskonale. Po zakończeniu pracy w naszym virtual environment, należy je opuścić. Możemy to zrobić za pomocą komendą:
$ deactivate
Podsumowanie
Tym samym, nauczyliśmy się co to jest środowisko wirtualne w Python oraz jak z niego korzystać. W praktyce virtual environment jest dość często wykorzystywane, w szczególności w przypadku kiedy mamy do czynienia z aplikacjami Python wymagającymi dużo bibliotek.
- Wirtualne środowisko, tworzymy za pomocą komendy python3 -m venv venv
- Dobrą praktyką jest nazywać je 'venv’, w ten sposób za każdym razem jak zobaczymy katalog o takiej nazwie, od razu wiemy, że powinniśmy uruchomić venv
- aktywujemy venv za pomocą komendy source ./venv/bin/activate
- kończymy pracę z wirtualnym środowiskiem za pomocą deactivate
Warto dodać że tworzenie wirtualnych środowisk ma również swój koszt. Początkowo, zaraz po utworzeniu, takie środowisko zajmuje około 6-7 MB, jest to jednak znikoma cena jaką przyjdzie nam zapłacić za uniknięcie kolizji związanych z różnymi wersjami bibliotek na potrzeby różnych aplikacji.