A pyenv használata a Python több verziójának futtatásához Mac rendszeren
a helyi Python fejlesztői környezet kezelése továbbra is kihívást jelent, még a tapasztalt fejlesztők számára is. Bár vannak jól dokumentált stratégiák a csomagkezeléshez, van még egy lépés annak biztosításához, hogy a szükséges Python verziót futtassa, amikor szüksége van rá.
miért fontos a Python verziója?
először furcsa fogalom, de a programozási nyelvek változnak, mint bármely más szoftver. Vannak hibáik, javításaik és frissítéseik, mint bármelyik kedvenc API-jának és bármely más szoftvernek. Hasonlóképpen, a különböző kiadásokat egy szemantikai változatként ismert háromjegyű szám azonosítja.
pic.twitter.com/yt1Z2439W8
– Denny Perez (@dennyperez18) May 28, 2019
sok éven át a Python 2 volt a programozási nyelv általánosan használt fő verziója. 2020 januárjában a Python 2 elérte az élet végét, és ettől kezdve csak a Python 3-at támogatják a nyelv fő karbantartói. A Python 3 folyamatosan fejlődik, és rendszeresen kiadja az új frissítéseket. Ezért fontos számomra, hogy rendszeresen megkapjam ezeket a frissítéseket.
Nemrégiben megpróbáltam futtatni egy projektet macOS-on, amely a Python 3.5.9-től függött, egy olyan verziótól, amelyet nem telepítettem a rendszeremre. Logikusnak tűnhet azt gondolni, hogy a Python package manager pip telepítheti*, de nem ez volt a helyzet:
$ 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
Alternatív megoldásként letölthettem volna ezt a verziót a hivatalos Python webhelyről, de hogyan futtathatnám be a Mac-en a Python meglévő verziója mellett? A Python verziójának megadása, amelyet minden alkalommal használni fogok, amikor futtatom a tolmácsot (python3.7 vagy python3.5 például) a legjobb esetben hibára hajlamosnak tűnik. Kell, hogy legyen jobb megoldás.
(megjegyzés a fentiekhez: tudom, hogy ennek nincs értelme a tapasztalt Python fejlesztőnek, de akkor volt értelme számomra. Boldogan beszélnék arról, hogy miért gondolom még mindig.)
A pyenv telepítése és beállítása
szerencsére a pyenv létezik, hogy megkerülje ezt a komplexitás-sorozatot. A kezdéshez telepítenem kellett a pyenv-t. Klónozhatom és lefordíthatom magam forrásból, de inkább az ilyen csomagokat kezelem a Homebrew csomagkezelőn keresztül:
$ brew install pyenv
a Python verziójának pyenv-en keresztüli használatához elengedhetetlen a shell PATH változójának megértése. Az elérési út a parancs neve alapján határozza meg, hogy a héj hol keres fájlokat. Biztosítani kell, hogy a shell megtalálja a Python pyenv által futtatott verzióját, nem pedig az alapértelmezés szerint telepített verziót (amelyet gyakran rendszerverziónak hívnak). Ha nem változtatja meg az elérési utat, itt van az eredmény:
$ which python
/usr/bin/python
Ez a Python rendszerverziója.
a pyenv helyes beállításához a következőket futtathatja Bash vagy zsh formátumban:
$ PATH=$(pyenv root)/shims:$PATH
most, ha megnézed a Python verzióját, látni fogod, hogy ez a pyenv által kezelt verzió:
$ which python
/Users/my_username/.pyenv/shims/python
Ez az export utasítás (PATH=) csak erre a shell példányra fog változni, ezért tedd állandó változássá, hozzá kell adnod a dotfiles-hez. Mivel a zsh hivatalosan a macOS alapértelmezett héja, erre fogok összpontosítani. Add hozzá ugyanazt a szintaxist A ~/ – hez.zshrc file:
$ echo 'PATH=$(pyenv root)/shims:$PATH' >> ~/.zshrc
most minden alkalommal, amikor futtatunk egy parancsot a zsh-ban, a Python pyenv verzióját fogja használni. Ne feledje, hogy egyetlen idézőjelet használtam az echo-val, így nem értékeli ki a parancsokat.
az .a zshrc fájl csak a zsh példányokat kezeli, ezért ellenőrizze, hogy mi a shell, és szerkessze a kapcsolódó dotfájlokat. Ha még egyszer ellenőriznie kell, hogy mi az alapértelmezett shell, futtathatja az echo $SHELL programot. Ha zsh, használja a fenti parancsot. Ha Bash-t használ, változtassa meg a ~/értéket.zshrc hogy ~/.bashrc. A pyenv README-jében mélyen belemerülhet az útbeállításba, ha többet szeretne megtudni.
A pyenv használata a Python verziók kezeléséhez
most, hogy a pyenv irányít, láthatjuk, hogy csak a Python rendszer áll rendelkezésre:
$ pyenv versions
system
mint fentebb említettük, egyáltalán nem akarja használni ezt a verziót (További információ a miért). Most, hogy a pyenv helyesen van beállítva, azt akarom, hogy legyen néhány Python verziója, amelyeket rendszeresen használok.
van egy módja annak, hogy az összes Python verzió elérhető az összes különböző tárolók pyenv férhet futtatásával pyenv install –list. Ez egy hosszú, elsöprő lista, amelyet a jövőben hasznos lehet áttekinteni. Egyelőre ragaszkodom a legújabb minden dot-release (3.5.x vagy 3.6.x ahol x a legújabb) megtalálható a Python letöltési oldalon. Ezt szem előtt tartva telepítem a 3.5.9-et és a 3.8.0-at:
$ pyenv install 3.5.9
$ pyenv install 3.8.0
Ez eltart egy ideig, ezért igyon egy teát (vagy olvassa el a fenti linkek egyikét). Érdekes megjegyezni, hogy a kimenet végigmegy a Python ezen verziójának letöltésén és felépítésén. Például a kimenet azt mutatja, hogy a fájl közvetlenül a Python.org.
miután minden telepítve van, beállíthatja az alapértelmezett értékeket. Szeretek az élvonalban élni, ezért a globális alapértelmezett Python verziót a legújabbra állítottam:
$ pyenv global 3.8.0
és ez a verzió azonnal be van állítva a shell-ben. Megerősítés:
$ python -V
Python 3.8.0
A futtatni kívánt projekt csak a Python 3.5-tel működik, ezért helyben állítom be a verziót, és megerősítem, hogy használatban van:
$ pyenv local 3.5.9
$ python -V
Python 3.5.9
mivel a pyenv helyi opcióját használtam, hozzáadott egy fájlt az aktuális könyvtáramba, hogy nyomon kövesse ezeket az információkat.
$ cat .python-version
3.5.9
most végre beállíthatok egy virtuális környezetet a kívánt projekthez, és biztos lehetek benne, hogy a Python megfelelő verzióját futtatom.
$ python -m venv venv
$ source ./venv/bin/activate
(venv) $ which python
/Users/mbbroberg/Develop/my_project/venv/bin/python
Ha többet szeretne megtudni, olvassa el ezt az oktatóanyagot a virtuális környezetek Mac rendszeren történő kezeléséről.
becsomagolás
alapértelmezés szerint több Python verzió futtatása kihívást jelenthet. Úgy találom, hogy a pyenv-vel kezdve biztosítom a Python verzióit, amelyekre szükségem van a futtatáshoz, amikor szükségem van rájuk.