Adăugare ianuarie 2019: Dacă reveniți la acest blog după ce ați făcut upgrade la macOS Mojave, consultați această problemă github pentru o soluție la problema comună pyenv „zlib nu este disponibil”.

Înainte de a începe, să trecem pe scurt termenii folosiți în titlu:

  • Mai multe versiuni Python: Diferite instalații Python pe aceeași mașină, de exemplu, 2.7 și 3.4.
  • Medii virtuale: medii independente izolate care pot avea atât o versiune specifică a Python, cât și a oricăror pachete specifice proiectului instalate în ele, fără a afecta alte proiecte.

Aici vom analiza trei instrumente diferite pentru a lucra cu acestea și când ați putea avea nevoie de fiecare. Să explorăm cazurile de utilizare pentru:

  • venv / pyvenv
  • pyenv
  • pyenv-virtualenv

Dacă utilizați un versiune unică din Python spune versiunea 3.3+și doresc să se descurce diferite medii virtuale, atunci venv e tot ce ai nevoie.

Dacă doriți să utilizați mai multe versiuni de Python la 3.3+, cu sau fără medii virtuale, apoi continuați să citiți despre pyenv.

Dacă vrei și tu să lucrezi cu Python 2, atunci pyenv-virtualenv este un instrument de luat în considerare.

venv

Din Python 3.3+ venv pachetul este inclus. Este ideal pentru crearea de medii virtuale ușoare.

Până la Python 3.6 un script numit pyvenv a fost, de asemenea, inclus ca un ambalaj venv, dar asta a fost depreciat. Acesta va fi complet eliminat în Python 3.8. Exact aceeași funcționalitate este disponibilă atunci când se utilizează venvși orice documentație existentă ar trebui actualizată. Pentru oricine este interesat, puteți citi motivele care stau la baza deprecierii pyvenv.

venv este folosit pentru a crea un mediu nou prin comanda terminalului:

$ python3 -m venv directory-name-to-create

activat cu:

$ source name-given/bin/activate

și dezactivat cu pur și simplu:

$ deactivate

Dacă trebuie să eliminați complet mediul după dezactivarea acestuia, puteți rula:

$ rm -r name-given

În mod implicit, mediul pe care îl creează va fi versiunea curentă a Python pe care o utilizați. Dacă scrieți documentație și doriți siguranța suplimentară că versiunea corectă a Python este utilizată de cititorul dvs., puteți specifica numărul de versiune majoră și minoră în comandă, astfel:

$ python3.6 -m venv example-three-six

Dacă cititorul folosește o altă versiune decât 3.6, atunci comanda nu va avea succes și va indica în mesajul său de eroare. Cu toate acestea, orice versiune de patch-uri (de exemplu 3.6.4) va funcționa.

Când mediul este activ, orice pachete pot fi instalate pe acesta prin pip la fel de normal. Implicit, mediul nou creat va fi nu includeți toate pachetele deja instalate pe aparat. La fel de pip în sine nu va fi neapărat instalat pe aparat. Este recomandat să faceți primul upgrade pip la ultima versiune, folosind pip install --upgrade pip.

Proiectele vor avea de obicei un requirements.txt fișier specificând dependențele sale. Aceasta permite comanda de comandă rapidă pip install -r requirements.txt comanda pentru a instala rapid toate pachetele în mediul virtual nou creat. Ele vor exista doar în mediul virtual. Nu va fi disponibil când este dezactivat, dar va persista atunci când este reactivat.

Dacă nu este nevoie să utilizați versiuni suplimentare ale Python în sine, atunci acesta este tot ce aveți nevoie pentru a crea medii virtuale izolate, specifice proiectului.

pyenv

Dacă doriți să utilizați mai multe versiuni de Python pe o singură mașină, atunci pyenv este un instrument utilizat în mod obișnuit pentru a instala și a comuta între versiuni. Acest lucru nu trebuie confundat cu amortizarea menționată anterior pyvenv scenariu. Nu vine la pachet cu Python și trebuie instalat separat.

pyenv documentație include o descriere excelentă a cum functioneaza, deci aici ne vom uita pur și simplu la modul de utilizare.

În primul rând va trebui să-l instalăm. Dacă utilizați Mac OS X, putem face acest lucru folosind Homebrew, altfel luați în considerare alte opțiuni de instalare.

$ brew update
$ brew install pyenv

Apoi, adăugați următoarele în partea de jos a scripturilor shell pentru a permite pyenv pentru a schimba automat versiunile pentru dvs.:

eval "$(pyenv init -)"

Pentru a face, deschideți în uz shell script, via $ ~/.zshrc, $ ~/.bashrc sau $ ~/.bash_profile și copiați și lipiți linia de mai sus în.

Alergare pyenv versions va arăta ce versiuni Python sunt instalate în prezent, cu un * alături de cel utilizat în prezent. pyenv version arată direct acest lucru și python --version poate fi folosit pentru a verifica acest lucru.

Pentru a instala o versiune suplimentară, spuneți 3.4.0, pur și simplu utilizați pyenv install 3.4.0.

pyenv arată în patru locuri pentru a decide ce versiune de Python să utilizeze, în ordine de prioritate:

  1. PYENV_VERSION variabila de mediu (dacă este specificată). Puteți utiliza pyenv shell comanda pentru a seta această variabilă de mediu în sesiunea dvs. curentă de shell.
  2. Specific aplicației .python-version fișier în directorul curent (dacă este prezent). Puteți modifica directorul curent .python-version fișier cu pyenv local comanda.
  3. Primul .python-version fișier găsit (dacă există) prin căutarea fiecărui director părinte, până la atingerea rădăcinii sistemului de fișiere.
  4. Fișierul versiunii globale. Puteți modifica acest fișier folosind pyenv global comanda. Dacă fișierul versiunii globale nu este prezent, pyenv presupune că doriți să utilizați Python „sistem”. (Cu alte cuvinte, orice versiune ar rula dacă pyenv nu ar fi în PATH.)

Atunci când configurați un nou proiect care urmează să utilizeze Python 3.6.4 atunci pyenv local 3.6.4 ar fi rulat în directorul său rădăcină. Acest lucru va seta atât versiunea, cât și ar crea un .python-version fișier, astfel încât mașinile altor colaboratori să-l ridice.

descrierea completă a pyenv comenzi este unul de marcat.

pyenv și venv

Când lucrăm cu Python 3.3+, acum știm atât cum să instalăm și să comutăm între diferite versiuni ale Python, cât și cum să creăm noi medii virtuale.

Ca exemplu, să presupunem că înființam un proiect care urma să folosească Python 3.4.

Mai întâi am putea seta versiunea noastră locală folosind pyenv local 3.4.0.

Dacă am fugi atunci python3 -m venv example-project un nou mediu virtual ar fi creat sub example-project, folosind Python 3.4.0 activat local.

Activăm folosind source example-project/bin/activate și poate începe să lucreze.

Apoi am putut opțional document pe care ar trebui să-l folosească un colaborator python3.4 -m venv <name>. Aceasta înseamnă chiar dacă un colaborator nu a folosit pyenv the python3.4 comanda ar erora dacă versiunea lor Python nu ar fi aceeași versiune majoră și minoră (3 și 4), așa cum am intenționat.

Alternativ, am putea alege să specificăm pur și simplu că 3.4.0 urma să fie folosit și să instruim python3 -m venv <name>. Dacă credem că orice version gse acceptă mai mult de 3.4, atunci putem alege și să folosim python3 peste python3.4, ca și cum colaboratorul ar folosi 3.6, altfel ar primi și o eroare. Aceasta este o decizie specifică proiectului.

pyenv-virtualenv

pyenv poate fi folosit pentru a instala ambele versiuni Python 2 și 3. Cu toate acestea, după cum am văzut, venv este limitat la versiunile Python mai mari de 3.3.

pyenv-virtualenv este un instrument pentru a crea medii virtuale integrate cu pyenvși funcționează pentru toate versiunile Python. Este încă recomandat să utilizați Python oficial venv acolo unde este posibil. Dar dacă, de exemplu, creați un mediu virtual bazat pe 2.7.13, atunci aceasta face complimente pyenv.

De asemenea, funcționează bine cu Anaconda și Miniconda conda medii dacă le utilizați deja. Un instrument numit virtualenv există, de asemenea. Nu este acoperit aici, dar este legat la sfârșit.

După instalare pyenv poate fi instalat apoi utilizând Homebrew (sau alternative) ca atare:

$ brew install pyenv-virtualenv

Următorul în .zshrc, .bashrc, sau .bash_profile (în funcție de shell-ul pe care îl utilizați) adăugați următoarele în partea de jos:

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Asta permite pyenv pentru a activa și dezactiva automat mediile la mutarea directoarelor.

Pentru a crea un nou mediu virtual, utilizați:

$ pyenv virtualenv <version> <name-to-give-it>

// for example

$ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10

Mediile existente pot fi listate cu:

$ pyenv virtualenvs

Activat / dezactivat cu:

$ pyenv activate <name>
$ pyenv deactivate

La momentul scrierii, când utilizați activate avertismentul prompt changing will be removed from future release va fi afișat. Aceasta este așteptat și se referă numai la (env-name) fiind afișat în shell-ul dvs., nu utilizarea fișierului activate porunci în sine.

Instalarea cerințelor funcționează așa cum este descris în venv. Spre deosebire de venv A rm -r comanda nu este necesară pentru a elimina un mediu, un uninstall comanda există.

Gânduri finale

Între aceste trei instrumente, avem capacitatea de a colabora la orice proiect, indiferent de versiunea Python sau de dependențele necesare. Știm, de asemenea, cum să documentăm instrucțiunile de configurare pe care să le folosească alții pentru orice proiect la care lucrăm.

Putem vedea, de asemenea, raționamentul care stă la baza setului de utilizare, deoarece nu toți dezvoltatorii vor avea nevoie de toate cele trei.

Sperăm că acest lucru a fost util și este o referință utilă în combinație cu documentația legată mai jos.

Mulțumesc pentru lectură! ?

Alte lucruri pe care le-am explorat:

Resurse