Utilizando pyenv para manter multiplas versões de Python em seus projetos

William Oliveira
Training Center
Published in
5 min readFeb 13, 2018

Frequentemente precisamos utilizar versões antigas ou mais atuais das linguagens de programaçã em nossos projetos.

Isso acontece pelos mais diversos motivos como: testar novas funcionalidades das linguagens, fazer uma prova de conceito ou mesmo para manter aquele sistema legado que usa a versão 2.7 do Python ou 0.10 do Nodejs e não da para atualizar por algum motivo adverso (quebra tudo).

Somente para quem já utiliza controle de versão do ambiente em outras linguagens: com Nodejs costumamos utilizar o NVM para tal e para Ruby, costumamos utilizar o RVM, por exemplo.

Recentemente precisei rodar um projeto utilizando a versão 3 da linguagem Python e no meu sistema operacional (Linux Mint) a versão padrão é a 2.7. Eu teria, então, que rodar o comando python3 xyz.py toda vez que quisesse rodar a aplicação com a versão 3 da linguagem.

Para que, toda vez que eu rodasse o comando python app.pyo sistema executasse a versão 3 ou mesmo pra que eu pudesse usar o pip (instalador de pacotes do Python) então eu precisaria de um controlador de versão de ambientes. Lembrei logo do pyenv, um controlador de versão que utilizamos amplamente em nossos projetos.

Neste artigo vou ensinar a instalar e utilizar o pyenv para controlar as versões do Python em nossos projetos.

Instalando o pyenv

O próprio repositório do projeto possui instruções de instalação via Git, porém eles criaram um instalador automático para que não precisemos nos preocupar com todos os comandos.

Basta executar o seguinte comando no seu terminal:

curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash

Aguarde a instalação e então será necessário colocar o seguinte trecho de código no seu .bashrc ou .zshrc:

export PATH=”~/.pyenv/bin:$PATH”
eval “$(pyenv init -)”
eval “$(pyenv virtualenv-init -)”

Para isso podemos rodar um vim ~/.bashrc ou vim ~/.zshrc e adicionar o conteúdo acima nas últimas linhas do arquivo.

O bashrc ou zshrc são os arquivos de configuração do nosso shell e eles são carregados assim que abrimos o terminal, então não bastará somente adicionarmos os comandos no final do arquivo, precisamos também recarregar o arquivo de configuração.

Para recarregar as configurações, rodamos source ~/.bashrc ou source ~/.zshrc em nosso terminal.

Agora o pyenv deve funcionar se rodarmos o comando pyenv --version, por exemplo.

Rodando o comando ‘pyenv --version’ recebemos como retorno a versão do pyenv instalada em nosso S.O.

Agora podemos utilizar uma versão para cada projeto que possuirmos. Vamos ver como fazer isso.

Utilizando versões diferentes de Python para cada projeto

Vamos entender como instalar e usar as diferentes versões de Python para cada projeto, então.

Imagine que precisamos rodar o Python 2.7 em um projeto. Para isso precisaremos ter a versão do Python 2.7 instalada via pyenv e depois configuramos a versão diretamente dentro do projeto.

Vamos instalar a versão 2.7 com o seguinte comando:

pyenv install 2.7
Imagem da instalação do Python 2.7

Agora podemos rodar o comando pyenv versionspara confirmar as versões instaladas no sistema operacional.

Imagem do comando ‘pyenv versions’ e o retorno do comando que são as versões disponíveis no S.O.

E para escolher a versão a utilizar no projeto em questão rodamos o comando pyenv local 2.7 e se rodarmos o python --version veremos que a versão sendo executada no momento é a 2.7.

Rodando o comando ‘pyenv local 2.7’ para especificar a versão a utilizar neste projeto

Mas, como eu comentei no início do texto, a minha versão padrão do Python já é a 2.7. Então vamos repetir os mesmos passos, até aqui, mas instalar a versão 3 da linguagem.

pyenv install 3.6.4
pyenv local 3.6.4
python --version
Instalando e configurando a versão do Python 3.6.4 via pyenv conforme passos listados anteriormente

Da para perceber diferença na forma como o pip funciona ao instalarmos o Flask nas duas versões, por exemplo.

Versão 3.6.4:

Instalando o Flask na versão 3.6.4

Versão 2.7:

Instalando o Flask na versão 2.7

Se criarmos um arquivo chamado app.py e adicionar o seguinte conteúdo:

E rodar o comando python app.py em qualquer das duas versões, o app irá funcionar.

Versão 3.6.4:

Rodando o app Flask na versão 3.6.4

Versão 2.7:

Rodando o app Flask também na versão 2.7

Desinstalando versões do Python via pyenv

Caso queiramos fazer uma limpeza nas versões instaladas em nosso sistema operacional precisaremos listar as versões disponíveis globalmente, pegar o nome exato da instalação e rodar o comando pyenv uninstall versão. Vamos ver o passo a passo.

Listando as versões instaladas

Para listar as versões, executamos o comando pyenv versions.

Listando as versões com o comando ‘pyenv versions’

Repare que, além de mostrar as versões disponíveis, o pyenv também mostra qual é a versão que está rodando localmente selecionado com um asterisco (*).

Versão selecionada para o projeto em questão

Removendo uma versão

Para remover alguma versão bastará rodar o comando pyenv uninstall versão. Vamos analisar um exemplo removendo a versão 2.7.

pyenv uninstall 2.7
Removendo a versão 2.7 do Python

Será necessário confirmar que deseja remover a versão com um “yes”.

E podemos confirmar se a versão foi realmente removida rodando o comando pyenv versionsde novo.

Listando as versões novamente

Repare que a remoção foi somente do pyenv, se eu rodar o comando python2 no meu terminal ainda será possível usar a versão que está instalada diretamente no meu S.O..

Exibindo a versão de Python 2.7 do sistema operacional

Conclusão

O pyenv pode nos ajudar muito quando precisamos testar coisas novas ou quando precisamos especificar exatamente a versão de Python que utilizamos em um projeto, ajudando bastante quando precisamos dar manutenção a projetos legados.

Se você curtiu este artigo, não esqueça de dar uma palminha aqui no Medium e compartilhar por ai com seus amigos e amigas e com seu papagaio que vive reclamando de ter que usar versões antigas do Python pra rodar o legado.

Espalhe a palavra.

--

--

William Oliveira
Training Center

Engenheiro de software frontend, escritor do livro O Universo da Programação (http://bit.ly/universo-da-programacao), periférico e bissexual