Jeśli kiedykolwiek podzieliłeś się z przyjacielem prostym kodem, złożoną aplikacją lub czymś pomiędzy, to prawdopodobnie wypowiedziałeś zdanie „Cóż, u mnie działa”. Bez względu na to, jak zaawansowane stają się komputery, wydają się powtarzać problemy związane z różnicami w konfiguracji lub instalacji dowolnych dwóch maszyn. Trwają ciągłe próby rozwiązania tego problemu, a dla programistów Pythona jednym z najlepszych sposobów zapobiegania temu jest korzystanie ze środowisk wirtualnych.
Bez środowiska wirtualnego, kiedy wpisujesz python lub python3 w swoim terminalu, uruchamiasz dowolną wersję Pythona zainstalowaną na twoim komputerze:
$ python --version
Python 2.7.17
$ python3 --version
Python 3.7
W poniedziałek może to być wersja X, ale we wtorek może to być nagle Python Y, jeśli zdarzy ci się zaktualizować komputer w nocy. Dość często nie stanowi to problemu, ponieważ Python zazwyczaj dobrze radzi sobie z kompatybilnością wsteczną. Jednak niektóre komputery zachowują bardzo stare wersje języka Python w celu zapewnienia wsparcia dla starszych wersji, a niektórzy programiści piszą na najwyższej wersji, chcąc korzystać z najnowszych funkcji języka. Może to spowodować nieoczekiwane problemy.
Ten sam problem dotyczy pojedynczych modułów Pythona. Możesz zainstalować wersję Z modułu ExamplePyMod, opracować kod i opublikować aplikację online. Jeśli ktoś, kto rok temu zainstalował wersję X lub Y ExamplePyMod, spróbuje uruchomić Twój kod, mogą pojawić się nieoczekiwane problemy ze zgodnością. Częstym problemem dla programistów jest również przyjmowanie modułu za pewnik. Jeśli używasz modułu tak często, że praktycznie myślisz o nim jako o części Pythona, prawdopodobnie zapomnisz dodać moduł jako wymaganie do uruchomienia aplikacji.
W obu przypadkach, aby znaleźć główną przyczynę błędów, musisz przeprowadzić audyt i zaktualizować swój system lub system użytkownika, tak aby oboje korzystali z tych samych wersji.
Środowisko wirtualne tymczasowo przekierowuje wywołanie języka Python do określonej wersji języka Python. Na przykład użycie wersji Python 3.7 do stworzenia środowiska wirtualnego gwarantuje, że Python wskazuje na Python 3.7, a nie na Python 2.7, Python 3.8 lub cokolwiek innego, co możesz mieć na swojej maszynie deweloperskiej.
Na przykład, oto wirtualne środowisko utworzone w Pythonie 3.7:
# bez środowiska wirtualnego
$ python --version
Python 2.7.17
# środowisko wirtualne
$ python3.7 -m venv example37/venv
$ cd example37
$ source ./venv/bin/activate
(venv)$ python
Python 3.7
(venv)$ deactivate
# bez środowiska wirtualnego
$ python --version
Python 2.7.17
Moduły są instalowane lokalnie w środowisku wirtualnym. Kiedy pracujesz w środowisku wirtualnym, możesz zainstalować ExamplePyMod i używać go przez cały dzień, ale zniknie, gdy opuścisz środowisko wirtualne.
Oto proces instalacji modułu:
# bez środowiska wirtualnego
$ python3
>>> import flask
ModuleNotFoundError: No module named 'flask'
# środowisko wirtualne
(venv)$ python -m pip install flask
[...]
(venv) bash-4.3$ python -m pip install flask
Collecting flask
Downloading [...]
Successfully installed [...]
(venv)$ python
>>> from flask import Flask
>>> app = Flask(__name__)
(venv)$ deactivate
# znowu bez środowiska wirtualnego
$ python3
>>> import flask
ModuleNotFoundError: No module named 'flask'
Może się wydawać, że instalacja i reinstalacja wymaganych modułów za każdym razem, gdy siadasz do kodu, wymaga wiele dodatkowej pracy. W rzeczywistości system środowiska wirtualnego zachowuje moduły, których używasz, w pliku Requirements.txt w katalogu projektu. Możesz przetwarzać requirements.txt za pomocą pip, aby obsługiwać automatyczne instalacje wszystkich zależności:
$ cd myproject
$ source ./venv/bin/activate
(venv)$ python -m pip install -r requirements.txt
Installed [...]
$ python
>>> from flask import Flask
>>> import examplepymod
Python również buforuje wymagane moduły, więc możesz zacząć działać w mgnieniu oka.
Polecenie tworzenia wirtualnego środowiska w Pythonie to:
$ python -m venv /directory/venv
Aby aktywować środowisko wirtualne:
$ source ./venv/bin/activate
(venv)$
Aby zainstalować wymagane moduły:
(venv)$ python -m pip install -r requirements.txt
Aby dezaktywować środowisko wirtualne:
(venv)$ deactivate
Środowiska wirtualne są ważną częścią procesu rozwoju języka Python. Naucz się ich używać, aby chronić siebie i swoich użytkowników przed nieoczekiwanymi i niepożądanymi niespodziankami. Krótko mówiąc, korzystaj ze środowisk wirtualnych, aby poświęcić więcej czasu na kodowanie, a mniej na debugowanie!
MMM Workeo Sp.z.o.o
ul. Juliusza Słowackiego 55/1
60-521 Poznań, Wielkopolskie