virtualenv przy tworzeniu wirtualnych środowisk Python'aVirtualenvto narzędzie do zarządzania oddzielnymi środowiskami Pythona dla różnych projektów. Umożliwia instalację pakietów w niezależnej lokalizacji, co pozwala uniknąć konfliktów między różnymi wersjami bibliotek wymaganymi przez poszczególne aplikacje.
Wirtualne środowiska są szczególnie przydatne w sytuacjach, gdy nie można instalować pakietów globalnie, np. na współdzielonych hostach. Dzięki nim każdy projekt może mieć własne, niezależne środowisko z odpowiednimi wersjami pakietów.
Do tworzenia środowiska wirtualnych dostępne są obecnie dwa narzędzia:venv i virtualenv.
Moduł venv nie oferuje wszystkich funkcji virtualenv.
Zalecamy zatem korzystanie z virtualenv, który obsługuje Python 2 i Python 3+
Aby skorzystać z virtualenv, należy uruchomić zadanie i załadować wybrany moduł Pythona.
Na partycjach
bem2-cpulem-cpuilem-gpukażdy moduł Pythona zawiera narzędzievirtualenv
Jeśli po załadowaniu wybranej wersji Pythona nie można aktywować
virtualenv, prosimy o zgłoszenie problemu na adres kdm@wcss.pl
virtualenvvirtualenvpipvirtualenvW poniższym przykładzie uruchamiamy zadanie interaktywne, sprawdzamy dostępność konkretnej wersji Pythona, a następnie ładujemy odpowiedni moduł:
[wcss] abc@r23c01b11 ~ > module av python
-------------------------------------------------- /usr/local/Modules --------------------------------------------------
Python/3.13.1-GCC-13.3.0 Python/3.13.1-GCC-14.2.0
------------------------------------------- /usr/local/easybuild/modules/all -------------------------------------------
Python-bundle-PyPI/2023.06-GCCcore-12.3.0 Python/2.7.18-GCCcore-11.2.0-bare Python/3.10.4-GCCcore-11.3.0
Python-bundle-PyPI/2023.10-GCCcore-13.2.0 Python/2.7.18-GCCcore-11.3.0-bare Python/3.10.4-GCCcore-11.3.0-bare
Python-bundle-PyPI/2024.06-GCCcore-13.3.0 Python/3.7.2-GCCcore-8.2.0 Python/3.10.8-GCCcore-12.2.0
Python/2.7.15-foss-2018b Python/3.7.4-GCCcore-8.3.0 Python/3.10.8-GCCcore-12.2.0-bare
Python/2.7.15-GCCcore-7.3.0-bare Python/3.8.2-GCCcore-9.3.0 Python/3.11.3-GCCcore-12.3.0
Python/2.7.15-GCCcore-8.2.0 Python/3.8.6-GCCcore-10.2.0 Python/3.11.5-GCCcore-13.2.0
Python/2.7.16-GCCcore-8.3.0 Python/3.9.5-GCCcore-10.3.0 Python/3.12.3-GCCcore-13.3.0
Python/2.7.18-GCCcore-9.3.0 Python/3.9.5-GCCcore-10.3.0-bare Python/3.13.1-GCCcore-14.2.0
Python/2.7.18-GCCcore-10.2.0 Python/3.9.6-GCCcore-11.2.0
Python/2.7.18-GCCcore-10.3.0-bare Python/3.9.6-GCCcore-11.2.0-bare
[wcss] abc@r22c03b01 ~ > module load Python/3.11.3-GCCcore-12.3.0
Loading Python/3.10.4-GCCcore-11.3.0
Loading requirement: GCCcore/11.3.0 zlib/1.2.12-GCCcore-11.3.0 binutils/2.38-GCCcore-11.3.0 bzip2/1.0.8-GCCcore-11.3.0 ncurses/6.3- GCCcore-11.3.0
libreadline/8.1.2-GCCcore-11.3.0 Tcl/8.6.12-GCCcore-11.3.0 SQLite/3.38.3-GCCcore-11.3.0 XZ/5.2.5-GCCcore-11.3.0 GMP/6.2.1-GCCcore- 11.3.0libffi/3.4.2-GCCcore-11.3.0 OpenSSL/1.1
Komenda pip list pozwala sprawdzić, jakie moduły są aktualnie zainstalowane w środowisku dla wybranej wersji Pythona
[wcss] abc@r22c03b01 ~ > pip list
Package Version
----------------------------- ----------
alabaster 0.7.12
...
virtualenv 20.0.18 # <<<<<<<<< wskazuje
wcwidth 0.1.9
wheel 0.34.2
Po załadowaniu wybranej wersji Pythona, powinno być dostępne narzędzie virtualenv.
[wcss] abc@r22c03b04 ~ > virtualenv --version
virtualenv 20.14.1
[wcss] abc@r23c01b11 ~ > virtualenv <venvname>
created virtual environment CPython3.10.4.final.0-64 in 10436ms
creator ...
added seed packages: pip==22.0.4, setuptools==62.1.0, wheel==0.37.1 activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
Jeśli pojawi się komunikat:
ERROR: Could not install packages due to an OSError: [Errno 122] Disk quota exceededzalecamy skorzystanie z PD (Przestrzeni dyskowej] Usługi "Przetwórz na superkomputerze".
PD to dedykowane zasoby pamięci dyskowej przeznaczone do długoterminowego przechowywania danych.
Wybrana przez użytkownika nazwa (w przykładzie
venvname) określa lokalizację katalogów instalacyjnych wirtualnego środowiska (podanie absolutnej ścieżki spowoduje utworzenie środowiska dokładnie w tym miejscu). Jeśli podamy tylko nazwę, katalogi obsługujące środowisko wirtualne zostaną wygenerowane w bieżącej lokalizacji.
[wcss] abc@r23c01b11 ~ > source <venvname>/bin/activate
(venvname) wskazuje, że poruszamy się i wywołujemy komendy wewnątrz stworzonego środowiska wirtualnego.
(venvname) [wcss] abc@r23c01b11 ~ > python --version
Python 3.10.4
Polecenie source w powłokach Unix ustawia zmienne środowiskowe w bieżącej powłoce, a nie w podprocesie (który następnie znika, nie mając żadnego użytecznego efektu).
(venvname) [wcss] abc@r23c01b11 ~ > pip install <package>==<version>
(venvname) [wcss] abc@r23c01b11 ~ > pip install <package> --upgrade
Używając pip install w aktywowanym środowisku wirtualnym, pakiet zostanie zainstalowany w katalogu domowym środowiska wirtualnego i będzie dostępny tylko w jego obrębie.
Przykład:
(venvname) [wcss] abc@r23c01b11 ~ > pip install numpy pandas
Collecting numpy
Using cached numpy-1.24.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.3 MB)
Installing collected packages: numpy
Successfully installed numpy-1.24.2
...
...
Polecenie pip list pozwala wylistować wszystkie pakiety zainstalowane w środowisku, np. w venvname
Domyślnie w każdym nowo utworzonym środowisku wirtualnym instalowane są pakiety:
pip,setuptools,wheel (venvname) [wcss] abc@r21c01b16 ~ > pip list
Package Version
---------- -------
numpy 1.24.2
pandas 1.5.3
pip 22.0.4
setuptools 62.1.0
wheel 0.37.1
virtualenv $ (venvname) [wcss] abc@r23c01b11 ~ > python </path/to/script>.py
$ (venvname) [wcss] abc@r23c01b11 ~ > deactivate
Virtualenv w zadanich wsadowychNadmierna alokacja zasobów przez jednego użytkownika może uniemożliwić korzystanie z nich innym.
Dlatego prosimy o rozsądne i przemyślane planowanie rezerwacji oraz wykorzystania zasobów
sbatch do utworzenia środowiska wirtualnegoPoniżej znajduje się przykładowy skrypt przygotowany do wykonania zadania.
Może on zawierać przykładowe parametry #SBATCH:
#!/bin/bash
#SBATCH --job-name=MyJob
#SBATCH --output=result.out
#SBATCH --error=errlog.err
#SBATCH --mail-type=BEGIN,END,FAIL
#SBATCH --mail-user=<nameuser@pwr.edu.pl>
#SBATCH -N1
#SBATCH -c10
#SBATCH --mem=10G # Total memory per task (units: K,M,G,T)
#SBATCH --time=1:00:00
source /usr/local/sbin/modules.sh
module load Python/<version>
virtualenv <path/to/venvname>
source <path/to/venvname>/bin/activate
pip install <numpy> <pandas> <scipy> # SPACJĄ oddzielamy pakiety,które chcemy zainstalować
pip freeze > </path/to/requirements_name.txt> # opcjonalnie można wygenerować plik requirements.txt w wybranej lokalizacji
python </path/to/script.py>
Pod wskazaną ścieżką zostanie utworzone środowisko wirtualne o wybranej nazwie, wraz z opcjonalnym plikiem requirements_name.txt.
W skrypcie wsadowym, korzystając z tego pliku, możemy odwtorzyć konkretną konfigurację pakietów, po uprzednim zdefiniowaniu parametrów #SBATCH:
source /usr/local/sbin/modules.sh
module load Python/<version>
virtualenv <path/to/venvname>
source <path/to/venvname>/bin/activate
pip install -r </path/to/requirements_name.txt> # pobiera wskazane w pliku pakiety i biblioteki Pythona
python </path/to/script.py>
Ważne, aby wersja ładowanego modułu Pythona zgadzała się z wersją Pythona, na podstawie ktorej zostało utworzone środowisko virtualenv.
Przykładowy skrypt:
#!/bin/bash
#SBATCH --job-name=MyJobName
#SBATCH --output=result.out
#SBATCH --error=errlog.err
#SBATCH --mail-type=BEGIN,END,FAIL
#SBATCH --mail-user=<nameuser@pwr.edu.pl>
#SBATCH -N1
#SBATCH -c10
#SBATCH --mem=10G # Total memory per task (units: K,M,G,T)
#SBATCH --time=1:00:00
source /usr/local/sbin/modules.sh
module load Python/<version>
source <path/to/your/virtualenv>/bin/activate
python <your_script.py>
Polecenie
source <venvname>/bin/activateaktywuje utworzone środowisko wirtualne.
Należy je wykonać po załadowaniu odpowiedniego modułu Pythona i przed wykonaniem skryptu Pythona.
Tak przygotowane środowisko wirtualne można ponownie wykorzystać także w zadaniu interaktywnym srun, pod warunkiem wcześniejszego zaladowania odpowiedniego modułu Pythona (module load <Python/x.x.x>) oraz aktywacji środowiska ( source <nazwa_VE>/bin/activate).
Możemy wielokrotnie korzystać z już stworzonego środowiska w zadaniach interaktywnych srun, po załadowaniu odpowiedniego modułu Pythona (wersji, na podstawie której tworzylismy nasze środowisko wirtualnego z którego chcemy teraz ponownie skorzystać) po prostu uaktywniając je polceniem source, jak było wskazane powyzej.
Przydatne jest rejestrowanie, jakie pakiety i w jakich wersjach zainstalowane w środowisku wirtualnym.
Polecenie pip freeze wyświetla listę wszystkich pakietów wraz z ich wersjami.
Operator > przekieruje dane wyjściowe tego polecenia do pliku w bieżacej lokalizacji - najczęsciej, zgodnie z konwencją, do pliku requirements.txt (choć jego nazwa może być dowolna).
(venvname) [wcss] abc@r23c01b11 ~ > pip freeze > requirements.txt
(venvname) [wcss] abc@r23c01b11 ~ > cat requirements.txt
numpy==1.24.2
Plik requirements.txt z listą pakietów i ich wersji można wykorzystać do ponownej instalacji pakietów w innym lub nowym środowisku wirtualnym. W tym celu używamy polecenia pip z opcją -r:
(venvname_NEW) [wcss] abc@r23c01b11 pip install -r requirements.txt
Jeśli plik requirements.txt nie znajduje się w bieżącej lokalizacji, należy podać jego pełną ściezkę, np.:
(venvname_NEW) [wcss] abc@r21c01b16 ~ > pip install -r </home/nameuser/requirements.txt>
module?Pełna wersja dokumentacji użytkownika WCSS znajduje się tutaj
Jeśli nie znajdziesz rozwiązania w powyżej dokumentacji, prosimy o kontakt z kdm@wcss.pl