Python – wirtualne środowisko – venv

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)

  1. 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.

Wirtualne środowisko Pythona jako nowy folder
  1. Aktywacja wirtualnego środowiska
$ .\my_env\Scripts\activate

Po aktywowaniu środowiska zauważysz jego nazwę na początku wiersza poleceń.

aktywacja wirtualnego środowiska Python w PowerShell
  1. Wyłączenie wirtualnego środowiska
$ deactivate
wyłączenie wirtualnego środowiska Python w PowerShell

Python venv w systemach Unix-owych (Linux, Mac)

  1. Utworzenie wirtualnego środowiska
$ python3 -m venv my_env
$ ls
  1. 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.

  1. 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
utworzenie pliku requirements.txt wykorzystując 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

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)

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.

  1. Wykorzystanie konwertera dos2unix:
$ dos2unix tutorial/Scripts/activate
  1. Wykorzystanie komendy sed:
$ sed -i 's/\r$//' activate
  1. 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).


Nie przegap kolejnych wpisów -> śledź mnie:


Komentarze

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *