Gerencie seus interpretadores Python com pyenv

 python

Já utilizei Python sem virtualenv, conforme o tempo passa e a quantidade de pacotes instalados aumenta, a lentidão aumenta exponencialmente e a complexidade de se administrar diversas versões de pacotes que precisa em diferentes projetos, nem se fala.

Este cenário torna o uso do pyenv extremamente útil. (virtualenv e virtualenvwrapper já ajudam, mas durante este post, farei o possível para demonstrar o simples uso do pyenv e como instalar ele no seu sistema.

Antes que comece a leitura, este artigo é direcionado a Ubuntu ou sistemas basedos em Debian, caso use macOS, veja o artigo do Henrique Bastos:

O pyenv segue a linha de gerenciadores de versões como nvm, gvm, rvm e rbenv/ruby-build, de baixar o .tar.gz com os fontes e compilar o interpretador a partir disso. Segundo o README do projeto:

This project was forked from rbenv and ruby-build, and modified for Python.

Se quiser ter suporte ao Tkinter terá de ter o cabeçalho deste pacote instalado, o nome do pacote é identificado como tk-dev, para instalar no Ubuntu use:

$ sudo apt-get install tk-dev

Outras bibliotecas úteis para se ter instaladas são:

$ sudo apt-get install libreadline-dev libbz2-dev libsqlite3-dev

Para suporte a SSL instale os pacotes:

$ sudo apt-get install libffi-dev libssl-dev

A instalação do pyenv é um pouco complicada e envolve alguns passos, para simplificar existe um instalador feito pelo mantenedor do projeto, então para instalar basta copiar e colar o comando no terminal:

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

O legal é que para desinstalar é preciso somente excluir a pasta ~/.pyenv (esta pasta é a padrão de instalação do projeto):

$ rm -fr ~/.pyenv

Depois de instalado, você precisará adicionar algumas linhas ao seu ~/.bashrc, pode ser no final, no meu caso eu uso o zsh como shell padrão, então adiciono esse trecho no arquivo equivalente, que é ~/.zshrc.

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

Após isso é necessário iniciar uma nova sessão do shell, digitando o nome dele e apertando enter num terminal.

Para bash, digite bash e aperte enter.

Para zsh, digite zsh e aperte enter.

E assim por diante, dependendo do interpretador Shell que utiliza.

Podemos obter uma lista de todas as versões disponíveis para instalação não só do interpretador padrão CPython, como também do PyPy e Stackless entre outros, para isso use o comando:

$ pyenv install --list

As versões listadas sem um prefixo 2.7.12 ou 3.5.2 são referentes aos interpretadores padrões.

Já sabemos quais versões estão disponíveis, vamos instalar uma versão especifica de Python, substitua versão pelo número equivalente da versão que quer instalar, listada anteriormente:

$ pyenv install <versão>

Vamos deixar a versão que acabamos de instalar como padrão para todas as sessões de shell que forem abertas para o usuário corrente:

$ pyenv global <versão>

Agora que instalou e definiu uma versão como padrão, você pode listar todas as versões disponíveis para uso com um comando simples:

$ pyenv versions

Ele irá lista não só as versões padrões do interpretador como os virtualenvs que você já criou.

Usando a opção shell você define como padrão para esta (a corrente) sessão do Shell a versão passada como argumento, se fechar esse terminal ou aba que está rodando a versão do shell, a versão padrão volta a ser a definida com a opção global ou a do sistema caso nenhuma seja definida com pyenv:

$ pyenv shell <nova-versão>

Lembrando que <nova-versão> já deve estar previamente instalada.

Suporte ao virtualenv

Tenha em mente que ele usará o Python declarado como corrente na sua sessão shell em uso para poder criar o virtualenv baseado nele.

Para criar um vitualenv digite o comando:

$ pyenv virtualenv <nome>

Depois de criado, para ativar é só digitar:

$ pyenv activate <nome>

O comando pyenv shell <nome> também funciona, mas o comando deactivate não faz efeito. Já que você passou para a sessão de Shell ativo usar o seu virtualenv como se fosse uma versão de Python corrente e não um virtualenv, o efeito colateral é não poder ter como “desativar”.

Para desativar use:

$ pyenv deactivate

Referências


comments powered by Disqus