Instalando e utilizando o pyenv

pyenv

Pyenv é um gerenciador criado para controlar múltiplas versões de python em um mesmo ambiente. O mesmo permite ter versões distintas sendo executadas, além de se combinar com a criação de ambientes virtuais.

Instalando o pyenv

Basta seguir as recomendações do repositório oficial: https://github.com/pyenv/pyenv#basic-github-checkout

Ou utilizar um script de instalação que auxila em algumas configurações: https://github.com/pyenv/pyenv-installer

#Executando pela instalação purta 
$ curl https://pyenv.run | bash

ou

#Utilizando o script de instalação
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

É necessário modificar o arquivo de configuração de seu interpretador de comandas (.bashrc para o bash ou .zshrc para zsh/ohmyzsh) e adicionar os caminhos de path para o pyenv:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
#Aqui já ativando o virtualenv para funcionar nativamente
eval "$(pyenv virtualenv-init -)"

Abra um novo terminal (ou execute um source .bashrc por exemplo) e execute o comando para verificar a instalação:

$ pyenv

Deve retornar algo parecido dependendo da versão atual:

pyenvcmd

Utilizando o pyenv

Seguem alguns comandos e exemplos utéis para utilizar o pyenv.

Exemplos

$ pyenv versions
> system (set by /home/gabriel/.pyenv/version)
$ pyenv install 3.5.7 
> Downloading Python-3.5.7.tar.xz...
> -> https://www.python.org/ftp/python/3.5.7/Python-3.5.7.tar.xz
> Installing Python-3.5.7...
> Installed Python-3.5.7 to /home/gabriel/.pyenv/versions/3.5.7
$ pyenv versions
> * system (set by /home/gabriel/.pyenv/version)
> 3.5.7 (set by /home/gabriel/.pyenv/version)

O símbolo * indica a versão definida como global, que pode também pode ser verificada com o comando:

$ pyenv global
> system

Isso indica que todos os comandos pythons (pip, pip3 python, python3, etc.) serão executados pela versão system.

$ pyenv global 3.5.7; pyenv versions
>   system
> * 3.5.7 (set by /home/gabriel/.pyenv/version)
$ python
> Python 3.5.7 (default, Jun 21 2019, 17:36:06) 
> [GCC 7.4.0] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>
> ...
$ python3
Python 3.5.7 (default, Jun 21 2019, 17:36:06) 
[GCC 7.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
> >>  
> ...
$ python3.5
> Python 3.5.7 (default, Jun 21 2019, 17:36:06)
> [GCC 7.4.0] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>
$ pyenv global 3.5.7 system; pyenv global
> 3.5.7
> system
$ python
> Python 3.5.7 (default, Jun 21 2019, 17:36:06) 
> [GCC 7.4.0] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>
> ...
$ python3.6
> Python 3.6.8 (default, Jan 14 2019, 11:02:34) 
> [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
> Type "help", "copyright", "credits" or "license" for more information.
>>>
> ...
$ python2.7
>  Python 2.7.15+ (default, Nov 27 2018, 23:36:35)
>  [GCC 7.3.0] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>>

A versão 3.5.7 é reconhecida como inicial, resolvendo o comandopython, sendo o comandos python3.6 e python2.7 resolvidos pela versão system

$ pyenv global system 3.5.7; pyenv global
> system
> 3.5.7
$ python
> Python 2.7.15+ (default, Nov 27 2018, 23:36:35) 
> [GCC 7.3.0] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>>
> (...)
$ python3
> Python 3.6.8 (default, Jan 14 2019, 11:02:34) 
> [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
> Type "help", "copyright", "credits" or "license" for more information.
> >>>
> (...)
$ python3.5
> Python 3.5.7 (default, Jun 21 2019, 17:36:06) 
> [GCC 7.4.0] on linux
> Type "help", "copyright", "credits" or "license" for more information.>
> >>>

A versão inicial (system) resolve os comandos pythone python3, sendo que o comando python3.5 é resolvido pela versão também definida como global (3.5.7)

**Portanto a ordem de versões para `pyenv global v1 será a ordem que os comandas serão interpretados, fazendo com que possamos ter várias versões de python simultâneas e sem gerar concorrência.**

Para mais detalhes, documentações e exemplos consulte o repositório oficial da ferramenta: https://github.com/pyenv/pyenv

Para Ler na sequência: Combinando o virtualenvwarpper com o pyenv