Zazwyczaj ten temat jest pomijany w kursach nauki Pythona od podstaw. Korzyści wynikające z korzystania z wirtualnych środowisk zauważy się i tak pewnie po jakimś czasie nauki i rozwiązania problemów z bibliotekami. Mimo wszystko warto zgłębić temat stosunkowo wcześnie na drodze nauki.
Po co korzystać z venv?
Pracując nad wieloma projektami na tym samym środowisku niemal pewne jest, że trafisz na problem z konfliktem zależności. Powiedzmy, że w jednym z projektów korzystasz z NumPy 1.20. W innym projekcie potrzebujesz najnowszej wersji NumPy 2.0. Mając więc jedno środowisko po zainstalowaniu nowszej wersji najpewniej wcześniejszy projekt przestanie działać. Część funkcji i metod ze starszej wersji może nie być już aktualna w nowszej.
Dla projektów pisanych w Pythonie jednym z możliwych rozwiązań tego problemu są Środowiska Wirtualne.
Czym jest wirtualne środowisko Pythona?
Wirtualne środowisko to pudełko, które odseparowuje instancję Pythona i zainstalowanych bibliotek od instancji Pythona zainstalowanej w Twoim systemie. Biblioteki instalowane w wirtualnym środowisku nie wpływają na inne wirtualne środowiska ani na główną instancję Pythona w systemie (jak również na odwrót).
Nowsze wersje Pythona mają od razu wbudowany moduł venv
, który umożliwia tworzenie środowisk wirtualnych. W starszych wersjach Pythona możliwe, że konieczne będzie doinstalowanie tego modułu, jak poniżej w Ubuntu z Pythonem 3.8.
$ sudo apt install python3.8-venv
Wykorzystując wirtualne środowiska w łatwy sposób również odseparujesz różne wersje Pythona.
Jak stworzyć i uruchomić wirtualne środowisko Pythona?
Python venv w Windowsie (cmd, PowerShell)
- Utworzenie wirtualnego środowiska
$ python3 -m venv my_env
$ ls
Po utworzeniu środowiska zauważysz, że Python utworzył nowy folder zawierający niezbędne elementy dla świeżego środowiska Pythona.
- Aktywacja wirtualnego środowiska
$ .\my_env\Scripts\activate
Po aktywowaniu środowiska zauważysz jego nazwę na początku wiersza poleceń.
- Wyłączenie wirtualnego środowiska
$ deactivate
Python venv w systemach Unix-owych (Linux, Mac)
- Utworzenie wirtualnego środowiska
$ python3 -m venv my_env
$ ls
- Aktywacja wirtualnego środowiska
$ source my_env/bin/activate
Tutaj zauważ, że aktywacja środowiska różni się od Windowsa. W UNIXie trzeba wykorzystać komendę source
, a pliki aktywacyjne i zainstalowane moduły znajdują się w katalogu bin
, a nie w Scripts
, jak w Windowsie.
- Wyłączenie wirtualnego środowiska
$ deactivate
Zarządzanie modułami w środowisku i szybkie odtwarzanie
Instalowanie modułów w środowisku wirtualnym jest bardzo proste – po uruchomieniu środowiska po prostu instalujesz je tak, jak zwykle.
(my_env) $ pip install numpy
Listowanie zainstalowanych modułów można wyświetlić dwojako.
(my_env) $ pip list
(my_env) $ pip freeze
freeze
wyświetla listę w formacie odpowiadającym wymaganiom składni polecenia pip install
, więc jak już masz poinstalowane wszystkie potrzebne moduły wystarczy utworzyć plik requirements.txt, żeby łatwo odtwarzać takie samo środowisko.
(my_env) $ pip freeze > requirements.txt
(my_env) $ pip install -r requirements.txt
W powyższym przypadku NumPy był już zainstalowany, dlatego nic nowego nie zostało zainstalowane.
Więcej szczegółów o module venv
znajdziesz w dokumentacji Pythona.
Potencjalne problemy z wirtualnymi środowiskami Pythona
Nie ma tak łatwo – możesz natknąć się na parę problemów przy próbie uruchomienia wirtualnego środowiska.
Execution Policy w Windowsie
.\win_venv\Scripts\activate : File C:\Users\marek\repository\newpyproj\win_venv\Scripts\Activate.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\win_venv\Scripts\activate
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
ROZWIĄZANIE:
Uruchom cmd.exe lub PowerShell jako administrator i zmień Execution Policy:
$ Set-ExecutionPolicy RemoteSigned
Teraz aktywacja wirtualnego środowiska powinna przejść bez zakłóceń.
Problem z końcami linii w wersjach Pythona przed 3.12 (Python zainstalowany w Windows uruchamiany z BASHa)
: command not found
-bash: tutorial/Scripts/activate: line 4: syntax error near unexpected token `$'{\r''
'bash: tutorial/Scripts/activate: line 4: `deactivate () {
Wynika to z tego, że w Windowsie Python utworzył plik activate z końcami wierszy CRLF odpowiednimi dla Windowsa. Python 3.12 automatycznie używa końców linii UNIXowych. Sprawdzisz to tym kodem:
$ file tutorial/Scripts/activate
Proste 3 rozwiązania problemu, które zmieniają końce linii na UNIXowe.
- Wykorzystanie konwertera dos2unix:
$ dos2unix tutorial/Scripts/activate
- Wykorzystanie komendy sed:
$ sed -i 's/\r$//' activate
- Edycja pliku w Visual Studio Code (czy w jakimkolwiek innym edytorze tekstu):
Teraz jeszcze raz wykonując polecenie file tutorial/Scripts/activate
dostaniesz odrobinę inny rezultat:
Wirtualne środowisko w tym stanie będzie działać zarówno w bashu jak i PowerShell i cmd (przynajmniej na Windows 11, na starszym nie testowałem).
Dodaj komentarz