Python

Virtuálne prostredia v Pythone 3

Virtuálne prostredia v Pythone 3
Rovnako ako väčšina ľudí nenávidím inštaláciu nepotrebných balíkov na svoju pracovnú stanicu. Po dokončení ich odinštalovania nikdy nie je dosť. Balíky po sebe zanechávajú tony priečinkov a súborov. Vyžadujú veľa ďalších (nejasných) balíkov, ktoré tu po sebe tiež zostali. Tieto veci sa pomaly, ale isto hromadia na vašej pracovnej stanici a hoci nemusia zaberať žiadnu významnú časť vášho disku, môžu spôsobiť ďalšie problémy.

Staršie závislosti

Staršie balíčky sa môžu zdržiavať a váš kód v jazyku Python ich s radosťou použije. To nie je problém, ak sú vaše skripty Python určené na spustenie lokálne, a nie na priemyselné účely. Vedci v oblasti dát, študenti a dokonca aj bežní ľudia automatizujúci svoje každodenné úlohy môžu bez väčších problémov jednoducho používať staršie balíčky.

Problém začína, keď doručíte svoj kód do výroby. Je pravdepodobné, že keď to urobíte, pošlete iba svoj hlavný skript a nie všetky závislosti na balíku. Napríklad, ak ste napísali mikroslužbu, ktorá sa má dodať ako funkcia AWS Lambda, prvých pár riadkov môže importovať modul žiadosti takto:

požiadavka na import

Balík požiadaviek dodaný spoločnosťou AWS lambda sa bude líšiť od vášho staršieho a v dôsledku toho môže dôjsť k zlyhaniu programu.

Konflikty

Konflikty by sa tiež mohli dostať do situácie, keď rôzne projekty používajú rôzne verzie toho istého balíka. Možno niektoré z vašich starších projektov potrebujú staršie pip balíčky. Možno však budete potrebovať novší balík pre ďalšie projekty. Beží pip install -U aktualizuje balík vo vašom operačnom systéme a spôsobí problémy, keď sa vrátite k údržbe svojich starších projektov.

Virtuálne prostredia Pythonu

Ak používate akúkoľvek verziu Pythonu nad 3.5, môžete použiť vstavaný modul s názvom venv na vytvorenie takzvaných virtuálnych prostredí Pythonu. Tento modul robí to, že vytvorí izolovaný priečinok alebo adresár, kde môžu žiť všetky vaše balíčky pip a ďalšie závislosti. Priečinok obsahuje aj „aktivačný“ skript. Kedykoľvek chcete použiť konkrétne virtuálne prostredie, jednoducho spustíte tento skript, po ktorom je prístupný iba k balíkom obsiahnutým v tomto priečinku. Ak spustíte pip install, balíčky sa nainštalujú do tohto priečinka a nikde inde. Keď skončíte s používaním prostredia, môžete ho jednoducho „deaktivovať“ a potom vám budú k dispozícii iba globálne balíčky pip.

Ak používate Ubuntu 18.04 a vyššie, nemusíte ani inštalovať správcu balíkov pip do celého systému. Pip môže vo vašom virtuálnom prostredí existovať, iba ak to tak chcete.

Inštalácia venv a vytváranie virtuálnych prostredí

Ubuntu 18.04 LTS vychádza z krabice s programom Python 3.6.x, ale modul Python venv nie je nainštalovaný, ani pip. Nainštalujeme si iba venv.

$ apt nainštalovať python3-venv

Ďalej prejdeme do adresára, v ktorom chcete vytvoriť adresár virtuálneho prostredia. Pre mňa je to ~ / project1

$ cd ~ / project1

Vytvorte svoj venv pomocou nasledujúceho príkazu, všimnite si, že my-env je iba názov tohto prostredia, môžete ho pomenovať, ako chcete:

$ python3 -m venv môj-env

Poznámka: Niektoré inštalácie Python3, napríklad tie, ktoré sú k dispozícii vo Windows, nazývate tlmočník Pythonu iba pomocou pythonu a nie python3, ale to sa mení zo systému na systém. Z dôvodu konzistencie budem používať iba python3.

Po dokončení vykonania príkazu si všimnete nový priečinok ~ / project1 / my-evn. Ak chcete aktivovať virtuálne prostredie my-env, budete musieť:

  1. Bež,
    $ source ~ / project1 / my-env / bin / Activate ak používate Bash.
    Existujú alternatívne skripty, ktoré sa nazývajú aktivovať.loviť ryby a aktivovať sa.csh pre ľudí, ktorí používajú ryby, respektíve mušle csh.
  2. V systéme Windows sa dá skript vyvolať spustením:
    >.\ my-env \ Skripty \ aktivovať.netopier ak používate príkazový riadok, alebo,
    >.\ my-env \ Skripty \ aktivovať.ps1 ak používate PowerShell.

Používanie virtuálnych prostredí

Po úspešnom spustení skriptu si všimnete, že sa výzva zmení na niečo podobné, ako je zobrazené nižšie, teraz môžete balíčky inštalovať pomocou pipu:

(my-env) $ pip3 požiadavky na inštaláciu
## Nainštalované balíčky môžeme zobraziť pomocou príkazu „pip freeze“
(my-env) $ pip3 freeze
certifi == 2018.10.15
chardet == 3.0.4
idna == 2.7
pkg-resources == 0.0.0
žiadosti == 2.20.1
urllib3 == 1.24.1

Pokiaľ je virtuálne prostredie aktívne (ako naznačuje výzva), všetky balíčky sa uložia iba do adresára virtuálneho prostredia (my-env), bez ohľadu na to, kde sa v súborovom systéme nachádzate.

Ak sa chcete z virtuálneho prostredia dostať, môžete do príkazového riadku napísať deaktivovať a vrátite sa k použitiu celosystémovej inštalácie Pythonu. Môžete si všimnúť, že nové balíčky, ktoré sme práve nainštalovali, sa nebudú zobrazovať v globálnej inštalácii pipu.

Ak sa chcete zbaviť virtuálneho prostredia, jednoducho odstráňte priečinok my-env, ktorý bol vytvorený po spustení modulu. Môžete si vytvoriť ľubovoľné množstvo týchto prostredí.

Záver

S modulom venv sú virtuálne prostredia teraz k dispozícii ako štandardná vlastnosť Pythonu, najmä ak inštalujete z Pythonu.org. Predtým sme mali veľa implementácií tretích strán, ktoré sa nazývali virtualenv, pyenv atď.

To dalo vzniknúť čoraz viac nafúknutému softvéru ako Anaconda, ktorý je populárny najmä medzi dátovými vedcami. Je dobré mať konečne k dispozícii zjednodušujúci nástroj na správu balíkov Python bez toho, aby ste si museli inštalovať veľa ďalších nesúvisiacich harabúrd. Viac o venv si môžete prečítať tu.

Hry Ako inštalovať a hrať Doom na Linuxe
Ako inštalovať a hrať Doom na Linuxe
Úvod do Doom Séria Doom vznikla v 90. rokoch po vydaní pôvodného Doomu. Bol to okamžitý hit a od tej doby herná séria získala množstvo ocenení a origi...
Hry Vulkan pre používateľov systému Linux
Vulkan pre používateľov systému Linux
S každou novou generáciou grafických kariet vidíme, že vývojári hier posúvajú hranice grafickej vernosti a prichádzajú o krok bližšie k fotorealizmu. ...
Hry OpenTTD vs Simutrans
OpenTTD vs Simutrans
Vytvorenie vlastnej simulácie dopravy môže byť zábavné, relaxačné a mimoriadne lákavé. Preto sa musíte uistiť, že vyskúšate čo najviac hier, aby ste n...