S pythonem na Macu jsou jenom problémy. Časem vzniká chaos ve verzích, protože každý projekt vyžaduje jiné balíčky, jinou verzi pythonu atd. Zde je návod na použití pyenv pro správu více verzí na jednom počítači.
Správa lokálního vývojového prostředí Pythonu je i nadále výzvou, a to i pro zkušené vývojáře. I když existují dobře zdokumentované strategie pro správu balíčků, existuje další krok nezbytný k tomu, abyste se ujistili, že používáte verzi Pythonu, kterou potřebujete, když ji potřebujete.
Proč záleží na verzi Pythonu?
Zpočátku je to zvláštní koncept, ale programovací jazyky se mění jako každý jiný software. Mají chyby, opravy a aktualizace jako kterékoli vaše oblíbené rozhraní API a jakýkoli jiný software. Podobně jsou opět různá vydání identifikována třímístným číslem známým jako sémantická verze.
Některé projekty vyžadují konkrétní verzi a typické je to pro starší, které využívají Python 2. Jenomže doba jde dál a pro nové projekty máme nastavenou již novější verzi co s tím? Řešením je možnost přepínání mezi nainstalovanými verzemi pythonu. K tomu lze využít pyenv.
Instalace a nastavení pyenv
Pro instalaci pyenv lze využtí správce balíčku Homebrew:
$ brew install pyenv
Aby bylo možné používat verzi Pythonu prostřednictvím pyenv, je nezbytné porozumět proměnné PATH shellu. PATH určuje, kde shell hledá soubory podle názvu příkazu. Musíme zajistit, aby shell nalezl verzi Pythonu provozovanou pyenv, nikoli tu nainstalovanou ve výchozím nastavení (která se často nazývá systémová verze). Pokud nezměníte cestu, zde je výsledek:
$ which python
/usr/bin/python
To je systémová verze Pythonu.
Chceme-li správně nastavit pyenv, v Bash nebo zsh spustíme následující:
$ PATH=$(pyenv root)/shims:$PATH
Nyní, když zkontrolujeme verzi Pythonu, uvidíme, že je to ta, kterou spravuje pyenv:
$ which python
/Users/my_username/.pyenv/shims/python
Tento příkaz exportu (PATH=) se změní pouze pro tuto instanci shellu, takže z něj udělejme trvalou změnu, musíme ho přidat do souborů dotfiles. Protože zsh je oficiálně výchozí shell macOS, zaměříme se na něj. Připojme stejnou syntaxi k souboru ~/.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ěme si, že se použily jednoduché uvozovky s echo, takže nevyhodnocuje a nerozšiřuje příkazy.
Soubor .zshrc spravuje pouze instance zsh, takže nezapomeňme zkontrolovat, jaký je váš shell, a upravit související soubory dotfile. Pokud potřebujeme znovu zkontrolovat, jaký je váš 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, přejděte na nastavení cesty v README pyenv.
Použití pyenv ke správě verzí Pythonu
Nyní, když má pyenv kontrolu nad verzemi pythonu, vidíme, že má k dispozici pouze systémový Python:
$ pyenv versions
system
Jak bylo uvedeno výše, tuto verzi rozhodně nechcete používat. Nyní, když je pyenv nastaven správně, chceme, aby měl několik různých verzí Pythonu, které pravidelně používáte.
Existuje způsob, jak zobrazit všechny verze Pythonu dostupné ze všech různých úložišť, ke kterým má pyenv přístup, spuštěním pyenv install --list. Je to dlouhý seznam, který může být v budoucnu užitečný. Instalaci požadovaných verzí pythonu provedeme následujícím příkazem:
$ pyenv install 3.5.9
$ pyenv install 3.8.0
Instalace bude chvíli trvat. Je zajímavé poznamenat, že výstup prochází stahováním a vytvářením dané verze Pythonu. Výstup například ukazuje, že soubor pochází přímo z Python.org.
Jakmile je vše nainstalováno, můžete nastavit výchozí nastavení:
$ pyenv global 3.8.0
A tato verze je okamžitě nastavena jako výchozí. Ověření:
$ python -V
Python 3.8.0
Pokud máme projekt, který chceme spustit s Pythonem 3.5, provedeme nastaven lokálně a potvrdíme:
$ pyenv local 3.5.9
$ python -V
Python 3.5.9
Protože se použila volbu lokální instance, přidal se soubor do aktuálního adresáře, např, projektu.
$ cat .python-version
3.5.9
Nyní lze konečně nastavit virtuální prostředí pro projekt, který chceme, a mít jistotu, že používáme správnou verzi Pythonu.
$ python -m venv venv
$ source ./venv/bin/activate
(venv) $ which python
/Users/mbbroberg/Develop/my_project/venv/bin/python