Articles

Pyenv: n käyttäminen Pythonin useiden versioiden ajamiseen Macilla

paikallisen Pythonin kehitysympäristön hallinta on edelleen haasteellista, jopa kokeneille kehittäjille. Vaikka on olemassa hyvin dokumentoituja strategioita pakettien hallintaan, on toinen vaihe tarpeen varmistaa, että käytät Python-versiota, jota tarvitset, kun tarvitset sitä.

miksi Pythonin versiolla on väliä?

se on aluksi outo käsite, mutta ohjelmointikielet muuttuvat siinä missä muutkin ohjelmistot. Niissä on bugeja, korjauksia ja päivityksiä, kuten mikä tahansa suosikkirajapintasi ja mikä tahansa muu ohjelmisto. Samoin eri julkaisuja tunnistaa semanttisena versiona tunnetusta kolminumeroisesta luvusta.

😭 😭 😭 pic.twitter.com/yt1Z2439W8

— Denny Perez (@dennyperez18) May 28, 2019

monien vuosien ajan Python 2 oli yleisesti käytetty ohjelmointikielen pääversio. Tammikuussa 2020 Python 2 saavutti käyttöikänsä lopun, ja siitä eteenpäin kielen Keskeiset ylläpitäjät tukevat vain Python 3: a. Python 3 kehittyy tasaisesti ja julkaisee uusia päivityksiä säännöllisesti. Se tekee minulle tärkeää saada säännöllisesti näitä päivityksiä.

viime aikoina yritin ajaa macOS-käyttöjärjestelmällä projektia, joka riippui Python 3.5.9-versiosta, jota en ollut asentanut järjestelmääni. Saattaa vaikuttaa loogiselta ajatella, että Python-paketinhallintaohjelma pip voisi asentaa sen*, mutta näin ei ollut:

$ pip install python3.5.9
Collecting python3.5.9
ERROR: Could not find a version that satisfies the requirement python3.5.9 (from versions: none)
ERROR: No matching distribution found for python3.5.9

vaihtoehtoisesti olisin voinut ladata kyseisen version Pythonin virallisilta verkkosivuilta, mutta miten ajaisin sen Macissa nykyisen Python-versioni rinnalla? Python-version määrittäminen aion käyttää joka kerta, kun suoritan tulkin (python3.7 tai esimerkiksi python3.5) vaikuttaa parhaimmillaan virhealttiilta. On oltava parempi keino.

(huomautus edellä: tiedän, että tässä ei ole mitään järkeä kokeneelle Python-kehittäjälle, mutta se oli minulle silloin järkevää. Puhuisin mielelläni siitä, miksi minun mielestäni pitäisi.)

Pyenv: n asentaminen ja käyttöönotto

onneksi pyenv on olemassa työstämään tätä kompleksisuuksien sarjaa. Aluksi piti asentaa pyenv. Voisin kloonata ja kääntää sen itse lähdekoodista, mutta mieluummin hallitsen tällaisia paketteja Homebrew-paketinhallinnan kautta:

$ brew install pyenv

Pythonin version käyttämiseksi pyenvin kautta on oleellista ymmärtää komentotulkin POLKUMUUTTUJA. Polku määrittää komennon nimen perusteella, mistä komentotulkki etsii tiedostoja. Sinun on varmistettava, että komentotulkki löytää pyenvin ajaman Pythonin version, ei oletusarvoisesti asennettua (jota usein kutsutaan järjestelmäversioksi). Jos et muuta polkua, tässä on tulos:

$ which python
/usr/bin/python

se on pythonin järjestelmäversio.

perustaaksesi pyenvin oikein, voit suorittaa seuraavat Bashissa tai zsh: ssa:

$ PATH=$(pyenv root)/shims:$PATH

nyt, Jos tarkistat Pythonin version, näet sen olevan pyenvin hallinnoima:

$ which python
/Users/my_username/.pyenv/shims/python

että vientiilmoitus (PATH=) muuttuu vain tässä komentotulkin ilmentymässä, joten tee siitä pysyvä muutos, sinun täytyy lisätä se dotfileisiisi. Koska zsh on virallisesti macOS: n oletusarvoinen komentotulkki, keskityn siihen. Lisää sama syntaksi~/: iin.zshrc-tiedosto:

$ echo 'PATH=$(pyenv root)/shims:$PATH' >> ~/.zshrc

nyt joka kerta, kun suoritamme komennon zsh: ssa, se käyttää Pythonin pyenv-versiota. Huomaa, että käytin yksittäisiä lainausmerkkejä Echon kanssa, joten se ei arvioi ja laajenna komentoja.

The.zshrc-tiedosto hallitsee vain zsh-instansseja, joten tarkista, mikä komentotulkkisi on ja muokkaa siihen liittyviä dotfiles-tiedostoja. Jos haluat tarkistaa, mikä oletuspäällyksesi on, voit suorittaa echo $Shellin. Jos se on zsh, käytä yllä olevaa komentoa. Jos käytät bashia, muuta ~/.zshrc to ~/.bashrc. Voit sukeltaa syvälle polunasetukseen pyenvin Readme-palvelussa, jos haluat lisätietoja.

Pyenvin käyttäminen Python-versioiden hallintaan

nyt kun pyenv on hallinnassa, voimme nähdä, että sillä on käytössään vain järjestelmä Python:

$ pyenv versions
system

kuten edellä mainittiin, et missään nimessä halua käyttää tätä versiota (lue lisää Miksi). Nyt kun pyenv on perustettu oikein, haluan, että siinä on muutama eri Python-versio, joita käytän säännöllisesti.

on olemassa tapa nähdä kaikki Python-versiot kaikista eri arkistoista, joihin pyenvillä on pääsy ajamalla pyenv install –list. Se on pitkä, ylivoimainen lista, joka voi olla hyödyllistä tarkistaa tulevaisuudessa. Toistaiseksi, pysyn uusin kunkin dot-release (3.5.x tai 3.6.x missä x on uusin) löytyy Pythonin lataussivulta. Siinä mielessä asennan 3.5.9 ja 3.8.0:

$ pyenv install 3.5.9
$ pyenv install 3.8.0

Tämä vie aikaa, joten ota teetä (tai lue jokin yllä olevista linkeistä). On mielenkiintoista huomata, että tuotos kävelee lataus ja rakentaminen että versio Python. Esimerkiksi tuloste osoittaa, että tiedosto tulee suoraan Python.org.

kun kaikki on asennettu, voit määrittää oletusarvot. Tykkään elää kärjessä, joten asetin globaalin oletuspython-versioni uusimpaan:

$ pyenv global 3.8.0

ja tuo versio on heti asetettu komentotulkkiini. Vahvistaakseni:

$ python -V
Python 3.8.0

ajettava projekti toimii vain Python 3.5: llä, joten asetan version paikallisesti ja varmistan, että se on käytössä:

$ pyenv local 3.5.9
$ python -V
Python 3.5.9

koska käytin paikallista vaihtoehtoa pyenv: n kanssa, se lisäsi tiedoston nykyiseen hakemistooni seuratakseni näitä tietoja.

$ cat .python-version
3.5.9

nyt voin vihdoin perustaa virtuaaliympäristön haluamaani projektiin ja olla varma, että käynnissä on oikea versio Pythonista.

$ python -m venv venv
$ source ./venv/bin/activate
(venv) $ which python
/Users/mbbroberg/Develop/my_project/venv/bin/python

saadaksesi lisätietoja, tutustu tähän opetusohjelmaan virtuaaliympäristöjen hallinnasta Macissa.

paketointi

oletuksena useiden Python-versioiden suorittaminen voi olla haastavaa. Löydän alkaen pyenv varmistaa olen versiot Python tarvitsen perustaa ajaa, kun tarvitsen niitä.