Kuinka hallita useita Python-versioita ja virtuaaliympäristöjä

Lisäys tammikuu 2019: Jos palaat tähän blogiin päivityksen jälkeen macOS Mojave -palveluun, katso tämä github-kysymys ratkaisusta yleiseen pyenv 'zlib not available' -ongelmaan.

Ennen kuin aloitamme, käymme lyhyesti läpi otsikossa käytetyt termit:

  • Useita Python-versioita : Pythonin eri asennukset samalle koneelle, esimerkiksi 2.7 ja 3.4.
  • Virtuaaliset ympäristöt : eristetyt itsenäiset ympäristöt, joihin voi olla asennettu sekä Pythonin tietty versio että kaikki projektikohtaiset paketit, vaikuttamatta muihin projekteihin.

Tässä tarkastelemme kolmea erilaista työkalua näiden kanssa työskentelyyn ja milloin tarvitset niitä kaikkia. Tutkitaan seuraavien käyttötapauksia:

  • venv / pyvenv
  • pyenv
  • pyenv-virtualenv

Jos käytät yhdellä versiota Python vaikkapa versio 3.3+ , ja haluavat hoitaa erilaisia virtuaalisia ympäristöjä, niin venvon kaikki mitä tarvitset.

Jos haluat käyttää useita Python- versioita versiossa 3.3+ , virtuaalisten ympäristöjen kanssa tai ilman , jatka lukemista pyenv.

Jos haluat työskennellä myös Python 2: n kanssa , se pyenv-virtualenvon harkittava työkalu.

venv

Python 3.3+: sta venvpaketti sisältyy. Se on ihanteellinen kevyiden virtuaaliympäristöjen luomiseen.

Python 3.6: een saakka myös nimetty komentosarja pyvenvsisällytettiin kääreeksi venv, mutta tämä on vanhentunut. Se poistetaan kokonaan Python 3.8: sta. Aivan samat toiminnot ovat käytettävissä käytettäessä venv, ja kaikki olemassa olevat asiakirjat tulisi päivittää. Kaikille kiinnostuneille voit lukea syyt heikentymiseen pyvenv.

venv käytetään uuden ympäristön luomiseen terminaalikomennolla:

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

aktivoitu:

$ source name-given/bin/activate

ja deaktivoidaan yksinkertaisesti:

$ deactivate

Jos sinun on poistettava ympäristö kokonaan sen deaktivoinnin jälkeen, voit suorittaa:

$ rm -r name-given

Oletuksena sen luoma ympäristö on käyttämäsi Pythonin nykyinen versio. Jos kirjoitat dokumentaatiota ja haluat lisää turvallisuutta siitä, että lukijasi käyttää Pythonin oikeaa versiota, voit määrittää komennossa pää- ja aliversion numerot, kuten:

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

Jos lukija käyttää muuta versiota kuin 3.6, komento ei onnistu ja se ilmestyy virheilmoituksessaan. Mikä tahansa korjaustiedosto (esimerkiksi 3.6.4) toimii kuitenkin.

Kun ympäristö on aktiivinen, kaikki paketit voidaan asentaa siihen pipnormaalisti. Oletusarvoisesti äskettäin luotu ympäristö ei sisällä koneeseen jo asennettuja paketteja. Koska pipitseään ei välttämättä asenneta koneeseen. On suositeltavaa päivittää pipensin uusimpaan versioon käyttämällä pip install --upgrade pip.

Projekteilla on yleensä requirements.txttiedosto, joka määrittelee sen riippuvuudet. Tämän avulla pikakomennokomento pip install -r requirements.txtvoi asentaa kaikki paketit nopeasti luotuun virtuaaliseen ympäristöön. Ne ovat olemassa vain virtuaalisessa ympäristössä. Se ei ole käytettävissä, kun se deaktivoidaan, mutta jatkuu, kun se aktivoidaan uudelleen.

Jos sinun ei tarvitse käyttää muita Python-versioita, sinun tarvitsee vain luoda erillisiä, projektikohtaisia, virtuaalisia ympäristöjä.

pyenv

Jos haluat käyttää useita Python-versioita yhdellä koneella, se pyenvon yleisesti käytetty työkalu versioiden asentamiseen ja vaihtamiseen. Tätä ei pidä sekoittaa aiemmin mainittuun poistettuun pyvenvkomentosarjaan. Se ei ole mukana Pythonissa, ja se on asennettava erikseen.

pyenvDokumentaatio sisältää suuren kuvaus siitä, miten se toimii, joten tässä me tarkastelemme yksinkertaisesti miten sitä käytetään.

Ensinnäkin meidän on asennettava se. Jos käytät Mac OS X: ää, voimme tehdä tämän Homebrew-ohjelmalla, muuten harkitse muita asennusvaihtoehtoja.

$ brew update $ brew install pyenv

Lisää seuraavaksi komentosarjan alaosaan seuraava, jotta pyenvvoit muuttaa versioita automaattisesti:

eval "$(pyenv init -)"

Tehdä, avata käytössä komentotulkin kautta $ ~/.zshrc, $ ~/.bashrctai $ ~/.bash_profilekopioida ja liittää yllä linjaa.

Käynnissä pyenv versionsnäkyy, mitkä Python-versiot ovat tällä hetkellä asennettuna, *vieressä olevan käytössä olevan version vieressä. pyenv versionnäyttää tämän suoraan, ja python --versionsitä voidaan käyttää tämän tarkistamiseen.

Jos haluat asentaa uuden version, 3.4.0käytä vain pyenv install 3.4.0.

pyenv etsii neljästä paikasta etsiäksesi mitä Python-versiota käyttää, tärkeysjärjestyksessä:

  1. PYENV_VERSIONMuuttujan (jos se on määritetty). Voit käyttää pyenv shellkomentoa tämän ympäristömuuttujan asettamiseen nykyisessä shell-istunnossa.
  2. Sovelluskohtainen .python-versiontiedosto nykyisessä hakemistossa (jos sellainen on). Voit muokata nykyisen hakemiston .python-versiontiedostoa pyenv localkomennolla.
  3. Ensimmäinen .python-versionlöydetty tiedosto (jos sellainen on) etsimällä jokaisesta päähakemistosta, kunnes se on saavuttanut tiedostojärjestelmän juuren.
  4. Yleinen versiotiedosto. Voit muokata tätä tiedostoa pyenv globalkomennolla. Jos globaalia versiotiedostoa ei ole, pyenv olettaa, että haluat käyttää "järjestelmä" Pythonia. (Toisin sanoen mikä tahansa versio toimisi, ellei pyenv ole sinun PATH.)

Kun asetat uuden projektin, jonka on tarkoitus käyttää Python 3.6.4: tä pyenv local 3.6.4, se ajetaan juurihakemistossa. Tämä asettaa version ja luo .python-versiontiedoston, jotta muiden avustajien koneet noutaisivat sen.

Kommenttien täydellinen kuvaus pyenvon kirjanmerkki.

pyenv ja venv

Työskennellessäsi Python 3.3+: n kanssa tiedämme nyt, kuinka asentaa ja vaihtaa Pythonin eri versioiden välillä, sekä kuinka luoda uusia virtuaalisia ympäristöjä.

Oletetaan esimerkiksi, että perustimme projektin, jonka oli tarkoitus käyttää Python 3.4: ää.

Ensin voisimme asettaa paikallisen version käyttämällä pyenv local 3.4.0.

Jos suoritamme sitten python3 -m venv example-projectuuden virtuaalisen ympäristön, se asennettaisiin kohtaan example-projectpaikallisesti käytössä olevan Python 3.4.0: n avulla.

Aktivoimme käytön source example-project/bin/activateja voimme aloittaa työskentelyn.

Seuraavaksi voimme valinnaisesti dokumentoida, että yhteistyökumppanin tulisi käyttää python3.4 -m venv . Tämä tarkoittaa sitä, että vaikka yhteistyökumppani ei käyttänyt pyenv- python3.4komentoa, komento virheittäisi, jos heidän Python-versio ei olisi sama pää- ja pienversio (3 ja 4), kuten tarkoitimme .

Vaihtoehtoisesti voimme päättää yksinkertaisesti määrittää, että 3.4.0 on käytettävä, ja ohjeistaa python3 -m venv . Jos uskomme, että ve rsio g reater kuin 3,4 on hyväksyttävää, niin me voi myös halutessaan käyttää python3yli python3.4, kuin jos työtoveri käytti 3,6 sitten ne muuten myös saada virheilmoituksen. Tämä on hankekohtainen päätös.

pyenv-virtualenv

pyenvvoidaan käyttää sekä Python 2 että 3 -versioiden asentamiseen. Kuten olemme nähneet, venvse rajoittuu Pythonin yli 3.3 -versioihin.

pyenv-virtualenvon työkalu virtuaalisten ympäristöjen luomiseen, jotka on integroitu pyenvPythonin kaikkiin versioihin, ja toimii kaikille Python-versioille. On edelleen suositeltavaa käyttää virallista Pythonia venvmahdollisuuksien mukaan. Mutta jos esimerkiksi luot virtuaalisen ympäristön, joka perustuu 2.7.13, niin tämä kohteliaisuuksia pyenv.

Se toimii hyvin myös Anaconda- ja Miniconda- condaympäristöjen kanssa, jos jo käytät niitä. Nimeltään työkalu on virtualenvmyös olemassa. Sitä ei käsitellä tässä, mutta se on linkitetty loppuun.

Asennuksen jälkeen pyenvse voidaan asentaa seuraavaksi käyttämällä Homebrew-ohjelmaa (tai muita vaihtoehtoja):

$ brew install pyenv-virtualenv

Seuraava sinun .zshrc, .bashrctai .bash_profile(riippuen siitä, mikä kuori käytät) lisätä seuraava alaspäin:

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

Tämän avulla pyenvympäristöt voidaan aktivoida ja deaktivoida automaattisesti hakemistoja siirrettäessä.

Luo uusi virtuaaliympäristö käyttämällä:

$ pyenv virtualenv   // for example $ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10

Olemassa olevat ympäristöt voidaan luetella seuraavilla tavoilla:

$ pyenv virtualenvs

Aktivoitu / deaktivoitu:

$ pyenv activate  $ pyenv deactivate

Kirjoitushetkellä näytetään activatevaroitus prompt changing will be removed from future releasekäytettäessä. Tämä on odotettavissa ja viittaa vain (env-name)kuoressa näkyviin, ei activateitse komennon käyttöön.

Asennusvaatimukset toimivat kohdassa kuvatulla tavalla venv. Toisin komentoa ei tarvita poistaa ympäristölle, komento on olemassa.venvrm -runinstall

Lopulliset ajatukset

Näiden kolmen työkalun välillä meillä on mahdollisuus tehdä yhteistyötä missä tahansa projektissa riippumatta Python-versiosta tai tarvittavista riippuvuuksista. Tiedämme myös, kuinka dokumentoida asennusohjeet muille käytettäväksi missä tahansa projektissa, jossa työskentelemme.

Voimme myös nähdä perustelut käytetyn sarjan takana, koska kaikki kehittäjät eivät vaadi kaikkia kolmea.

Toivottavasti tästä oli hyötyä, ja se on hyödyllinen viite yhdessä alla linkitetyn dokumentaation kanssa.

Kiitos lukemisesta! ?

Muita tutkittuja asioita:

  • ES- ja CommonJS-moduulien pilkkaaminen jest.mockilla ()
  • Aloittelijan opas Amazonin Elastic Container Service -palveluun

Resurssit

  • Python-virtuaaliympäristöt: pohjamaali
  • Poistuva pyvenv
  • Python- venvdokumentaatio
  • venv vs. virtualenv
  • Mitä eroa on venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv jne. Välillä?
  • Pitääkö minun asentaa pip?