Programovanie

Python virtualenv a venv robí a nerobí

Jedným z najväčších ťahákov Pythonu je jeho rozsiahly ekosystém balíkov tretích strán. Ak existuje úloha, ktorú chcete dokončiť - konverzia formátu súboru, scraping a reštrukturalizácia webových stránok, lineárna regresia, pomenujete ju - je pravdepodobné, že jeden alebo viac balíkov v indexe balíkov Python splní vaše požiadavky.

Najťažšou časťou je správa akumulácie balíkov v danej inštalácii Pythonu. Je až príliš ľahké bezmyšlienkovite nainštalovať desiatky balíkov a časom skončiť v prostredí Pythonu, ktoré je plné konfliktov medzi staršou a novšou verziou nástrojov, vďaka čomu je práca náročnejšia, ako je potrebné.

Python je dodávaný s automatizovaným systémom na udržiavanie lokálnej sady balíkov pre daný projekt Pythonu. Virtuálne prostredia - s láskavým dovolením virtualenv nástroj v Pythone 2 a venv v Pythone 3 - je možné ho použiť na vytvorenie samostatnej izolovanej inštancie modulu runtime Python pre projekt s vlastným doplnkom balíkov.

V tomto článku sa oboznámime s niektorými bežnými chybami, ktoré ľudia pri práci s virtuálnymi prostrediami v Pythone robia - a pochopili sme, ktorým podľahnú.

Používajte virtuálne prostredia Pythonu

Prvá častá chyba, ktorú robia programátori v Pythone virtualenv alebovenv je len sa s tým netrápiť. Ak všetko, čo robíte, je zostavenie rýchleho a špinavého skriptu jedna maličkosť, prečo sa vôbec obťažovať nastavením virtuálneho prostredia?

Problém je v tom, že „jedna maličkosť“ sa často ukáže ako oveľa, oveľa viac. Keď vaše zvládnutie jazyka Python porastie, nevyhnutne skončíte so zapojením ďalších modulov tretích strán, aby ste dosiahli zložitejšiu prácu. A čo viac, bude čoraz ťažšie riešiť závislosti na starších verziách balíkov, čo je jeden z kľúčových problémov, ktoré boli vytvorené na riešenie virtuálnych prostredí.

Niektorí ľudia tiež vráskavajú nos nad používaním virtualenv alebovenv pretože každé virtuálne prostredie je vlastnou malou kópiou runtime Pythonu, ktorá zaberá asi 25 MB. Ale diskový priestor je v dnešnej dobe až smiešne lacný a odstránenie virtuálneho prostredia je rovnako blažene jednoduché ako odstránenie jeho adresára (bez vedľajších účinkov). Navyše, ak máte viac úloh, ktoré zdieľajú spoločnú sadu balíkov, vždy môžete pre obe použiť rovnaké virtuálne prostredie.

Na správu virtuálnych prostredí Pythonu používajte virtualenvwrapper

Jedným zo spôsobov, ako znížiť zaťaženie virtuálnych prostredí, je použitievirtualenvwrapper. Tento nástroj umožňuje spravovať všetky virtuálne prostredia vo vašom pracovnom priestore z jednej centrálnej aplikácie príkazového riadku.

Rada pri vytváraní virtuálneho prostredia: Nepomenujte adresár virtuálneho prostrediavenv—Alebo, teda, názov ľubovoľného iného balíka, ktorý chcete použiť vo virtuálnom prostredí. To môže mať neskôr nepredvídateľné účinky na dovoz. Použite názov, ktorý jednoznačne popisuje váš projekt.

Neumiestňujte súbory projektu do virtuálneho prostredia Pythonu

Keď nastavujete virtuálne prostredie, adresár, v ktorom žije, nemá obsahovať nič iné ako samotné virtuálne prostredie. Váš projekt patrí do samostatného samostatného adresárového stromu. Existuje veľa dobrých dôvodov:

  • Váš adresárový strom projektu môže mať konvenciu pomenovania, ktorá koliduje s prvkami virtuálneho prostredia.
  • Jednoduchým spôsobom, ako odstrániť virtuálne prostredie, je odstrániť adresár. Miešanie projektových súborov s virtuálnym prostredím znamená, že musíte tieto dva súbory najskôr rozobrať.
  • Rovnaké virtuálne prostredie môže používať viac projektov.

Jedným zo spôsobov, ako veci usporiadať, by bolo vytvoriť adresár najvyššej úrovne, ktorý obsahuje rôzne virtuálne prostredia, a ďalší adresár najvyššej úrovne, ktorý obsahuje projekty. To je dôležité, pokiaľ sú dva oddelené.

Nezabudnite aktivovať svoje virtuálne prostredie Pythonu

Ďalšou častou chybou, ktorú ľudia vo virtuálnych prostrediach robia, je zabudnutie ich aktivovať alebo neaktivácia toho správneho.

Pred použitím virtuálneho prostredia v konkrétnej relácii shellu musí byť aktivovaný, prostredníctvom skriptu s názvom Aktivovať vo virtuálnom prostredí Skripty adresár. Po aktivácii sa s virtuálnym prostredím zaobchádza ako s predvolenou inštanciou Pythonu, kým ho deaktivujete (spustením deaktivovať príkaz).

Na tento krok je spočiatku ľahké zabudnúť, jednak preto, že je potrebné si ho osvojiť, jednak preto, že aktivačný skript je o úroveň nižšie v adresári virtuálneho prostredia. Tu sa hodí niekoľko trikov:

  1. Vytvorte odkazy na aktivačné / deaktivačné skripty v koreňovom adresári vášho projektu. Tieto skratky môžete pomenovať napríklad takto: konať a deact aby boli menej nepríjemní pri písaní.
  2. Pre projekty, na ktorých pracujete z IDE, a nie z príkazového riadku, vytvorte spúšťač projektu - dávkový súbor alebo skript shellu - pre príslušnú aplikáciu Python. Takto môžete zavolať aktivačný skript a potom spustiť svoj vlastný skript. Spravidla nemusíte po spustení deaktivovať prostredie skriptu, pretože relácia sa aj tak sama ukončí.

Tento posledný trik podčiarkuje dôležitý bod o aktiváciách virtuálneho prostredia: Vzťahujú sa iba na reláciu prostredia, v ktorej bežia. Napríklad, ak spustíte dve relácie príkazového riadku a aktivujete virtuálne prostredie v jednej, druhá relácia príkazového riadku použije predvolená inštalácia systému Python, nie virtuálne prostredie. Neaktivujete virtuálne prostredie pre systém ako celok, ale iba pre konkrétnu reláciu.

Nepoužívajte>= pre pripnutie verzie balíka vo virtuálnom prostredí Pythonu

Tento tip je užitočný aj mimo virtuálnych prostredí. Keď máte aplikáciu s a requirements.txt súbor, mali by ste určiť balíčky s presne číslo verzie. Povedať mypackage == 2.2, nie moje balenie> = 2.2.

Tu je dôvod. Jedným z hlavných dôvodov používania virtuálneho prostredia je zabezpečenie používania konkrétnych verzií balíkov. Ak používate >= namiesto ==, neexistuje žiadna záruka, že vy alebo niekto iný skončíte s rovnakou verziou, ak bude potrebné vytvoriť pre tento projekt prostredie. Použite presné číslo verzie. Vy, budúcnosť vy a ktokoľvek ďalší, kto po vás príde, vám poďakuje.

$config[zx-auto] not found$config[zx-overlay] not found