Articles

Jak používat pyenv spuštění více verzí Pythonu na Mac

Správa místní Python vývojové prostředí je i nadále výzvou i pro zkušené vývojáře. I když existují dobře zdokumentované strategie pro správu balíčků, existuje další krok nezbytný k zajištění toho, že používáte verzi Pythonu, kterou potřebujete, když ji potřebujete.

proč záleží na verzi Pythonu?

je to zpočátku zvláštní koncept, ale programovací jazyky se mění jako každý jiný software. Mají chyby, opravy a aktualizace jako některý z vašich oblíbených API a jakýkoli jiný software. Podobně jsou různá vydání identifikována třímístným číslem známým jako sémantická verze.

😭😭😭 pic.twitter.com/yt1Z2439W8

— Denny Perez (@dennyperez18) 28. Května 2019

Pro mnoho let, Pythonu 2 byl běžně používané hlavní verze programovacího jazyka. V lednu 2020 dosáhl Python 2 konce života a pouze Python 3 bude od té doby podporován základními správci jazyka. Python 3 se neustále vyvíjí a pravidelně vydává nové aktualizace. Proto je pro mě důležité pravidelně dostávat tyto aktualizace.

Nedávno jsem se pokusil spustit projekt v systému macOS, který závisel na Pythonu 3.5.9, verzi, kterou jsem do svého systému nenainstaloval. Mohlo by se zdát logické, že Python package manager pip mohl nainstalovat*, ale to nebyl ten případ.

$ 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

nebo bych mohl stáhnout tuhle verzi z oficiálních Python webové stránky, ale jak mám spustit to na mém Mac, po boku své stávající verzi Pythonu? Určení verze Pythonu mám v úmyslu použít při každém spuštění interpretu (python3.7 nebo python3. 5 například) se zdá být v nejlepším případě náchylný k chybám. Musí existovat lepší způsob.

(poznámka k výše uvedenému: vím, že to nemá smysl pro zkušeného vývojáře Pythonu, ale v té době mi to dávalo smysl. Rád bych mluvil o tom, proč si stále myslím, že by to mělo.)

instalace a nastavení pyenv

naštěstí pyenv existuje pro řešení této řady složitostí. Chcete-li začít, potřeboval jsem nainstalovat pyenv. Mohl bych to klonovat a zkompilovat sám ze zdroje, ale raději spravuji takové balíčky prostřednictvím správce balíčků Homebrew:

$ brew install pyenv

pro použití verze Pythonu přes pyenv je nezbytné pochopit proměnnou cesty shellu. Cesta určuje, kde shell hledá soubory podle názvu příkazu. Musíte zajistit, aby shell našel verzi Pythonu spuštěnou pyenv, nikoli verzi nainstalovanou ve výchozím nastavení(která se často nazývá verze systému). Pokud cestu nezměníte, je zde výsledek:

$ which python
/usr/bin/python

to je systémová verze Pythonu.

Chcete-li nastavit pyenv správně, můžete spustit následující v Bash nebo zsh:

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

Nyní, pokud se vám zkontrolovat verzi Pythonu, uvidíte, že je jeden řízen pyenv:

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

export výpisu (PATH=) změní se pouze pro tento shell instance, tak aby to bylo trvalé změny, musíte jej přidat do svého dotfiles. Vzhledem k tomu, zsh je oficiálně macOS výchozí shell, zaměřím se na to. Připojte stejnou syntaxi k ~/.soubor zshrc:

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

nyní pokaždé, když spustíme příkaz v zsh, použije pyenv verzi Pythonu. Všimněte si, že jsem použil jednotlivé uvozovky s ozvěnou, takže nehodnotí a nerozšíří příkazy.

.soubor zshrc spravuje pouze instance zsh, takže nezapomeňte zkontrolovat, jaký je váš shell, a upravit související dotfiles. Pokud potřebujete znovu zkontrolovat, jaký je výchozí shell, můžete spustit echo $SHELL. Pokud je to zsh, použijte výše uvedený příkaz. Pokud používáte Bash, změňte ~/.zshrc na ~/.bashrc. Pokud se chcete dozvědět více, můžete se ponořit hluboko do Nastavení cesty v README pyenv.

Použití pyenv spravovat Python verze

Nyní, že pyenv je pod kontrolou, můžeme vidět, že má pouze systém Python má k dispozici:

$ pyenv versions
system

Jak bylo uvedeno výše, si absolutně nechcete používat tuto verzi (přečtěte si více o tom, proč). Nyní, když je pyenv nastaven správně, chci, aby měl několik různých verzí Pythonu, které pravidelně používám.

existuje způsob, jak zobrazit všechny verze Pythonu dostupné ze všech různých repozitářů, ke kterým má pyenv přístup spuštěním pyenv install — list. Je to dlouhý, ohromující seznam, který může být užitečné v budoucnu přezkoumat. Prozatím se držím nejnovějšího z každého dot-release (3.5.x nebo 3.6.x kde x je nejnovější) najdete na stránce stahování Pythonu. S ohledem na to nainstaluji 3.5.9 a 3.8.0:

$ pyenv install 3.5.9
$ pyenv install 3.8.0

bude to chvíli trvat ,takže si trochu čaje (nebo si přečtěte jeden z výše uvedených odkazů). Je zajímavé poznamenat, že výstup prochází stahováním a budováním této verze Pythonu. Například výstup ukazuje, že soubor pochází přímo z Python.org.

Jakmile je vše nainstalováno, můžete nastavit výchozí hodnoty. Rád žiji na špici, takže jsem nastavil svou globální výchozí verzi Pythonu na nejnovější:

$ pyenv global 3.8.0

a tato verze je okamžitě nastavena v mém shellu. Pro potvrzení:

$ python -V
Python 3.8.0

projekt chci spustit, funguje pouze s Python 3.5, tak jsem si nastavte verzi lokálně a potvrdit, že je to v použití:

$ pyenv local 3.5.9
$ python -V
Python 3.5.9

Protože jsem použil místní možnosti s pyenv, je přidán soubor do aktuálního adresáře sledovat informace.

$ cat .python-version
3.5.9

Nyní, konečně můžu nastavit virtuální prostředí pro projekt chci, a být jisti, že dělám správnou verzi Pythonu.

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

Chcete-li se dozvědět více, podívejte se na tento tutoriál o správě virtuálních prostředí na počítačích Mac.

zabalení

ve výchozím nastavení může být spuštění více verzí Pythonu výzvou. Zjistil jsem, že počínaje pyenv zajišťuje, že mám verze Pythonu, které potřebuji nastavit, aby se spustily, když je potřebuji.