Preskočiť na obsah

Používanie Python virtuálnych prostredí

Python virtuálne prostredia umožňujú používateľom inštalovať projektovo špecifické závislosti bez ovplyvnenia systémovej inštalácie Pythonu. To je obzvlášť užitočné na HPC systémoch, kde používatelia nemajú administrátorské oprávnenia a jednotlivé projekty môžu vyžadovať rôzne verzie softvéru.

Štandardný modul Pythonu venv poskytuje ľahké virtuálne prostredia, ktoré izolujú nainštalované balíky a ich závislosti.

Výhody virtuálnych prostredí

  • Izolované závislosti: Udržiavajú knižnice projektu oddelené od systémových knižníc.
  • Reprodukovateľnosť: Zjednodušujú zdieľanie a nasadzovanie kódu s konzistentnými závislosťami.
  • Správa oprávnení: Umožňujú inštalovať balíky bez potreby administrátorských oprávnení.

V porovnaní s Conda prostrediami sú Python virtuálne prostredia ľahšie a jednoduchšie. Conda však poskytuje pokročilejšiu správu závislostí a podporu binárnych balíkov.

Architektúrne špecifické virtuálne prostredia

Perun ponúka x86_64 CPU uzly aj ARM64 (AArch64) GPU uzly založené na procesoroch NVIDIA Grace Hopper.

Python virtuálne prostredia sú architektúrne špecifické. Virtuálne prostredie vytvorené na prihlasovacích uzloch (x86_64) sa zvyčajne nedá použiť na GPU uzloch (AArch64) a naopak.

Ak sa prostredie bude používať na GPU uzloch, vytvorte ho priamo na GPU uzle:

srun --partition=gpu --gres=gpu:1 --pty bash

module load Python/<version>
python3 -m venv myenv
source myenv/bin/activate

Súbory s požiadavkami na balíky, ako je requirements.txt, je možné zdieľať medzi architektúrami. Samotné virtuálne prostredie sa však musí vytvoriť samostatne pre každú architektúru.


Používanie venv

Modul venv je súčasťou Pythonu a dá sa použiť na vytváranie virtuálnych prostredí.

Vytváranie virtuálneho prostredia

  1. Najprv načítajte príslušný Python interpreter:

    module load Python/<version>
    
  2. Vytvorte virtuálne prostredie v požadovanom adresári:

    python3 -m venv /path/to/the/directory
    
  3. Aktivujte prostredie:

    source /path/to/the/directory/bin/activate
    
  4. Deaktivujte prostredie:

    deactivate
    

Inštalácia balíkov

Používajte pip vo vnútri aktivovaného virtuálneho prostredia:

pip install <package-name>

Balík je dostupný dovtedy, kým je virtuálne prostredie aktívne. Po odstránení virtuálneho prostredia sa odstránia aj balíky nainštalované v tomto prostredí.

Použitie Python virtuálnych prostredí v Slurm batch skriptoch

Na použitie Python virtuálneho prostredia v Slurm batch skripte je potrebné načítať príslušnú verziu Pythonu a následne aktivovať samotné prostredie:

module load Python/<version>
source /path/to/the/directory/bin/activate

Riešenie problémov

Najčastejší problém sa objaví, keď verzia Pythonu použitá na vytvorenie prostredia sa líši od aktuálne načítaného Python modulu.

Pri vytváraní virtuálneho prostredia sa nastaví interpreter Pythonu, ktorý sa použil na jeho vytvorenie. Ak sa neskôr načíta iný Python modul, prostredie sa môže správať nepredvídateľne.

Aby ste tomuto problému predišli, uistite sa, že pred aktiváciou prostredia je vždy načítaný rovnaký Python modul.

Niektorí používatelia pridávajú príkaz na načítanie modulu priamo do aktivačného skriptu:

module load Python/<version>

Používanie virtualenvwrapper

virtualenvwrapper je nástroj, ktorý poskytuje ďalšie nástroje na zjednodušenie správy viacerých virtuálnych prostredí. Môžete ho použiť na organizáciu svojich Python virtuálnych prostredí.

Nastavenie virtualenvwrapper

Je potrebné nastaviť premennú prostredia WORKON_HOME a načítať setup skript pomocou príkazu source, ako je uvedené nižšie:

export WORKON_HOME=$HOME/envs
source $HOME/.local/bin/virtualenvwrapper.sh

Premenná WORKON_HOME určuje absolútnu cestu k adresáru, v ktorom sa budú ukladať virtuálne prostredia. Druhý príkaz source načíta funkcie shellu potrebné na fungovanie virtualenvwrapper. Odporúča sa umiestniť tieto dva príkazy do súboru .bashrc uloženého v domovskom adresári.

Základné príkazy

Medzi základné príkazy nástroja virtualenvwrapper patria:

# Create new virtual environment with selected flavor of python
mkvirtualenv -p $(which python3) <name-of-the-environment>

# Activate environment
workon <name-of-the-environment>

# Deactivate environment
deactivate

# Remove environment
rmvirtualenv <name-of-the-environment>

Odporúčané postupy

  • Vytvárajte samostatné prostredie pre každý projekt.

  • Po aktivácii prostredia môžete jednoducho prejsť do jeho adresára pomocou:

cd $VIRTUAL_ENV

Odporúča sa vytvoriť alias pre tento príkaz.

  • V adresári VIRTUAL_ENV/bin sú uložené štyri skripty (hooks):

    • preactivate – vykoná sa pred aktiváciou prostredia
    • postactivate – vykoná sa po aktivácii prostredia
    • predeactivate – vykoná sa pred deaktiváciou prostredia
    • postdeactivate – vykoná sa po deaktivácii prostredia

    Tieto skripty je možné využiť podľa požiadaviek konkrétneho projektu.

    Používanie hook skriptov

    echo "module load Python/<version>" >> $VIRTUAL_ENV/bin/preactivate
    echo "echo 'Environment activated!'" >> $VIRTUAL_ENV/bin/postactivate
    
  • Ukladajte závislosti do súboru requirements.txt na zabezpečenie reprodukovateľnosti:

pip freeze > requirements.txt
  • Znova nainštalujte závislosti pomocou súboru requirements.txt:
pip install -r requirements.txt

Riešenie problémov

  • Nefunguje aktivácia prostredia: Uistite sa, že používate príkaz source a že cesty sú správne.
  • Chyby pri inštalácii balíkov: Skontrolujte, či je aktívny správny Python interpreter.

Požiadavky na moduly a architektúru

Ak na vytvorenie virtuálneho prostredia používate Python modul, pred aktiváciou prostredia sa musí načítať rovnaký Python modul.

Na Perun sú virtuálne prostredia tiež architektúrne špecifické. Prostredia vytvorené na x86_64 prihlasovacích alebo CPU uzloch sa zvyčajne nedajú použiť na ARM64 Grace Hopper GPU uzloch. Vytvárajte samostatné virtuálne prostredia pre každú architektúru podľa potreby.

Created by: Marek Štekláč