Osoby które chcą nauczyć się programować w Pythonie a jeszcze nie mieli z nim styczności w pewnym momencie docierają do ściany z napisami PIP oraz VENV. W tym artykule pokażę jak to wszystko okiełznać pod systemem Linux.
PIP i VENV w skrócie
PIP to narzędzie które umożliwia instalowanie paczek dla Pythona - paczki w sensie biblioteki lub też samodzielne programy, które możemy wykorzystać w naszym projekcie. VENV to tak zwane Virtual Environment czyli wirtualne środowisko dla Pythona. Jakie ono daje możliwości? Jeśli stworzymy takie wirtualne środowisko i przy pomocy pip zainstalujemy określoną paczkę to ta paczka dostępna jest tylko i wyłącznie w jednym wirtualnym środowisku. Pomaga nam to w separowaniu paczek od siebie jeśli tworzymy na jednym systemie kilka projektów na raz i zapobiega powstawaniu w naszym systemie bałaganu, dlatego też przed napisaniem pierwszego programu koniecznie zapoznaj się z VENV.
Instalacja wymaganych pakietów
W zależności od posiadanej przez Ciebie dystrybucji nazwy paczek będą się różnić - wybrałem 4 popularniejsze dystrybucje:
Ubuntu i Debian
apt install python3 python3-pip python3-virtualenv virtualenvwrapper
Fedora
yum install python3 python3-pip python3-virtualenv python3-virtualenvwrapper
Opensuse Tumbleweed
zypper install python3-virtualenv python3-virtualenvwrapper
Tworzenie VENV
UWAGA! Poniższe operacje wykonuj jako zwykły użytkownik, nie jako root!
Skoro już wszystko mamy zainstalowane to przechodzimy do konfiguracji. Tworzymy folder w którym ma być nasz projekt, dla celów szkoleniowych niech będzie to docbox
:
mkdir docbox
Wchodzimy do tego katalogu:
cd ./docbox
Teraz tworzymy VENV:
virtualenv -p python3 .
Flaga -p
oznacza interpreter pythona który zostanie wykorzystany, w naszym przypadku bazujemy oczywiście na pythonie 3. Kropka na końcu oznacza zaś, że VENV zostanie utworzone w tym katalogu w którym aktualnie się znajdujemy.
Po wykonaniu operacji powinniśmy otrzymać na konsoli mniej więcej takie komunikaty:
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /docbox/bin/python3
Also creating executable in /docbox/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
Wirtualne środowisko mamy już utworzone, teraz trzeba je aktywować. Będąc cały czas w naszym katalog docbox wpisujemy polecenie :
source ./bin/activate
Jeśli nasze środowisko zostało aktywowane to linia zachęty powinna wyglądać tak:
(docbox) root@bbf3b9bc0bdc:/docbox#
W nawiasie widzimy nazwę naszego katalogu. Dla przykładu tak wygląda linia zachęty gdy wirtualne środowisko nie jest aktywne:
root@bbf3b9bc0bdc:/docbox#
Teraz mając aktywowane wirtualne środowisko spróbujmy coś zainstalować np. pakiet o nazwie pyyaml. Wpisujemy zatem polecenie:
./bin/pip3 install pyyaml
Teraz sprawdźmy, czy pyyaml jest widoczny przez Pythona w wirtualnym środowisku. Uruchamiamy go zatem:
./bin/python3
I po uruchomieniu pythona wpisujemy:
import yaml
Jeśli konsola nie wyrzuci żadnego błędu to znaczy, że pakiet został załadowany. Wyjdźmy z pythona poleceniem:
exit()
Oraz deaktywnujmy wirtualne środowisko. Aby to zrobić należy wpisać:
deactivate
Po deaktywacji środowiska uruchamiamy Pythona i ponownie wpisujemy:
import yaml
Tym razem jednak konsola zwróci nam błąd:
root@bbf3b9bc0bdc:/docbox# python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import yaml
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'yaml'
Potwierdziłem w ten sposób tezę, że pakiet zainstalowany w wirtualnym środowisku jest dostępny tylko w nim.
Epilog
Jeśli chcesz, aby twój program korzystał z VENV to w pierwszej linii musisz napisać:
#!/usr/bin/env python3
Jeśli chcesz uruchomić aplikację z wirtualnego środowiska z poziomu np. crona to na samym początku musisz podać pełną ścieżkę do pythona, który znajduje się w VNEV a potem pełną ścieżkę do twojego pliku. Przykład:
/home/docbox/bin/python3 /home/docbox/main.py
Źródła
Doświadczenia własne.
Wsparcie
Podobało się? Obserwuj i wspieraj
This post is supported by $1.81 @tipU upvote funded by @cardboard :)
@tipU voting service guide | For investors.
Bardzo fajnie, że dzielisz się wiedzą - ale mam tylko jedną uwagę. Nie uczmy nikogo złych nawyków - a normalna praca na użytkowniku root (wszystko co nie jest czynnością administracyjną dla danego systemu) to zły nawyk.
Wiem, że się czepiam ;-P. Bez urazy :-).
Poradnik był wykonywany w kontenerze dockera, stąd też ten root ;-)
Ogólnie masz rację, jak najmniej roota.
Ach, jasne! Stąd ten dziwny prompt :-D.
!tipuvote 4 :)
Thanks! :)
This spam is courtesy of @fulltimegeek! A real piece of shit who flags manual curation projects like @themadcurator because he's a spiteful cunt!!!