Utilizando pyenv para manter multiplas versões de Python em seus projetos
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.py
o 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.
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
Agora podemos rodar o comando pyenv versions
para confirmar as versões instaladas no sistema operacional.
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.
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
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:
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:
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
.
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 (*).
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
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 versions
de novo.
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..
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.