Python virtualenv i venv čine i ne čine

Jedno od najvećih privlačenja Pythona je njegov ekspanzivni ekosustav paketa trećih strana. Ako postoji zadatak koji želite izvesti - pretvorba formata datoteke, struganje i restrukturiranje web stranica, linearna regresija, kako biste to rekli - šanse su da će jedan ili više paketa u indeksu paketa Python ispuniti vaše potrebe.

Najteži dio je upravljanje gomilanjem paketa u datoj instalaciji Pythona. Previše je jednostavno nepromišljeno instalirati desetke paketa i s vremenom završiti s Python okolinom prepunom sukoba između starijih i novijih verzija alata, što otežava posao nego što treba.

Python dolazi s automatiziranim sustavom za održavanje skupa paketa lokalnim za zadani Python projekt. Virtualna okruženja - ljubaznošću virtualenvalata u Pythonu 2 i venvu Pythonu 3 - mogu se koristiti za stvaranje zasebne, izolirane instance Python vremena izvođenja za projekt, sa vlastitom komplementom paketa.

U ovom ćemo članku proći kroz neke od uobičajenih pogrešaka koje ljudi čine - i podliježu im - kad rade s virtualnim okruženjima u Pythonu. 

Koristite Python virtualna okruženja 

Prva česta pogreška koju programeri na Pythonu čine virtualenvili  venvje jednostavno ne zamarati se s njom. Ako sve što radite je sastavljanje brze i prljave skripte kako biste napravili jednu sitnicu , zašto se uopće truditi s postavljanjem virtualnog okruženja?

Nevolja je u tome što se ta "jedna sitnica" često pokaže puno, puno više. Kako vaše vladanje Pythonom raste, neizbježno ćete na kraju povući više modula treće strane kako biste obavili sofisticiraniji posao. Štoviše, postat će vam sve teže nositi se s ovisnostima o ranijim verzijama paketa, jednim od ključnih problema stvorenim za rješavanje virtualnih okruženja.

Neki ljudi također nabiru nos prilikom upotrebe virtualenvili  venvzato što je svako virtualno okruženje vlastita mala kopija Python runtimea, zauzimajući oko 25 MB. No, prostor na disku je danas smiješno jeftin, a uklanjanje virtualnog okruženja jednako je blaženo jednostavno kao i brisanje direktorija (bez nuspojava). Osim toga, ako imate više zadataka koji dijele zajednički skup paketa, uvijek možete koristiti isto virtualno okruženje za oba.

Koristite virtualenvwrapper za upravljanje Python virtualnim okruženjima

Jedan od načina za smanjenje virtualnih okruženja jest korištenje  virtualenvwrapper. Ovaj vam alat omogućuje upravljanje svim virtualnim okruženjima u vašem radnom prostoru iz jedne, središnje aplikacije naredbenog retka.

Savjet za stvaranje virtualnog okruženja: Nemojte imenovati direktorij svog virtualnog okruženja  venv- ili, u tom pogledu, ime bilo kojeg drugog paketa koji želite koristiti u virtualnom okruženju. To kasnije može imati nepredvidive učinke na uvoz. Upotrijebite ime koje nedvosmisleno opisuje vaš projekt.

Ne stavljajte datoteke projekata u Python virtualno okruženje

Kada postavite virtualno okruženje, direktorij u kojem živi ne treba sadržavati ništa osim samog virtualnog okruženja. Vaš projekt pripada svom zasebnom stablu direktorija. Za to postoji mnogo dobrih razloga:

  • Stablo direktorija vašeg projekta možda ima konvenciju imenovanja koja se sudara s elementima virtualnog okruženja.
  • Jednostavan način uklanjanja virtualnog okruženja je brisanje direktorija. Miješanje projektnih datoteka s virtualnim okruženjem znači da prvo morate rastaviti to dvoje.
  • Više projekata može koristiti isto virtualno okruženje.

Jedan od načina organiziranja stvari bio bi stvaranje direktorija najviše razine koji sadrži različita virtualna okruženja i drugog direktorija najviše razine koji sadrži projekte. Sve dok se njih dvoje drže odvojeno, to je važno.

Ne zaboravite aktivirati svoje Python virtualno okruženje 

Još jedna uobičajena pogreška koju ljudi čine s virtualnim okruženjima je zaboraviti ih aktivirati ili ne aktivirati pravo.

Prije nego što se virtualno okruženje može koristiti u određenoj sesiji ljuske, mora se aktivirati putem skripte imenovane activateu Scriptsdirektoriju virtualnog okruženja . Nakon aktivacije, virtualno okruženje tretira se kao zadana instanca Pythona sve dok ga ne deaktivirate (pokretanjem deactivatenaredbe).

U početku je lako zaboraviti ovaj korak, i zato što je to navika koju treba steći i zato što je aktivacijska skripta jedan nivo niže u direktoriju virtualnog okruženja. Ovdje vam dobro dođe nekoliko trikova:

  1. Stvorite prečace do skripti za aktiviranje / deaktiviranje u korijenskom direktoriju vašeg projekta. Te prečace možete nazvati jednostavnim poput acti deactkako biste ih učinili manje neugodnima za tipkanje.
  2. Za projekte na kojima radite iz IDE-a, a ne iz naredbenog retka, stvorite pokretač projekata - batch datoteku ili skriptu ljuske - za predmetnu aplikaciju Python. To vam omogućuje pozivanje aktivacijske skripte, a zatim pokretanje vlastite skripte. Uglavnom ne trebate deaktivirati okruženje skripte nakon pokretanja, jer će sesija ionako sama završiti.

Ovaj posljednji trik naglašava važnu točku o aktivacijama virtualnog okruženja: Primjenjuju se samo na sesiju okoline u kojoj se izvode. Na primjer, ako pokrenete dvije sesije naredbenog retka i aktivirate virtualno okruženje u jednoj, druga će sesija naredbenog retka koristiti zadana instalacija sustava Python, a ne virtualno okruženje. Ne aktivirate virtualno okruženje za sustav u cjelini , već samo za određenu sesiju.

Ne koristite  >=za pričvršćivanje verzije paketa u Python virtualnom okruženju

Ovaj je savjet koristan i izvan virtualnih okruženja. Kada imate aplikaciju s requirements.txtdatotekom, trebali biste navesti pakete s točnim brojem verzije. Kaži mypackage==2.2, nije mypackage>=2.2.

Evo zašto. Jedan od glavnih razloga za korištenje virtualnog okruženja je osiguravanje upotrebe određenih verzija paketa. Ako upotrijebite >=umjesto ==, ne postoji jamstvo da ćete vi - ili netko drugi - imati istu verziju ako okoliš treba ponovno stvoriti za taj projekt. Upotrijebite točan broj verzije. Ti, budući ti i tko god dođe nakon tebe, zahvalit će ti se.