Uma das coisas mais complexas de se fazer bem feito ao trabalhar com Python, é utilizar diversas versões corretamente, sem bagunçar o python nativo do seu sistema operacional.

Semana passada, assiti uma palestra do Sebastian Witowski na PyCon 2020, chamada: Modern Python Developer’s Toolkit. Achei ela tão boa, que resolvi compartilhar uma parte dela aqui. Mais especificamente a parte sobre a configuração do pyenv, para manter diversas versões do Python na sua máquina.

Instalação do Pyenv

A maneira mais fácil de instalar o pyenv no Linux, ou macOS, é utilizando o script pyenv-installer.

curl https://pyenv.run | bash

O comando acima, vai instalar o pyenv, e algumas ferramentas adicionais:

  • pyenv-doctor (para verificar se o pyenv está instalado e funcionando)
  • pyenv-virtualenv (plugin para gerenciar virtual enviroments)
  • pyenv-which-ext (esse plugin deixa você rodar comandos externos que não estão instalados no virtualenv atual)
  • pyenv-update (plugin para atualizar a versão do pyenv)

E no fim da instalação, você verá no terminal algumas instruções com comandos que devem ser adicionados no arquivo .bashrc (ou .zshrc/config.fish), não se esqueça desse passo. E então reinicie o seu terminal, para carregar as novas configurações.

Instalação no Ubuntu

Para uma instalação limpa do ubuntu, pode ser necessário instalar algumas libs antes:

sudo apt-get install build-essential libbz2-dev libffi-dev liblzma-dev libreadline-dev libsqlite3-dev libssl-dev python-tk python3-tk tk-dev zlib1g-dev -y

Instalando versões diferentes do Python

Com o comando abaixo, você pode verificar quais as versões disponíveis para instalação:

pyenv install --list

Resultado:

Available versions:
  2.1.3
  ...
  2.7.17
  2.7.18
  ...
  3.8.3
  3.8.4
  3.8.5
  3.8.6
  3.9.0
  3.9-dev
  3.10-dev
  ...
  activepython-3.6.0
  ...
  anaconda3-2020.07
  graalpython-20.1.0
  graalpython-20.2.0
  ...
  ironpython-2.7.7
  jython-dev
  ...
  jython-2.7.2
  ...
  miniconda3-4.7.10
  miniconda3-4.7.12
  ...
  pypy3.6-7.3.1
  pyston-0.5.1
  pyston-0.6.0
  pyston-0.6.1
  stackless-dev
  ...
  stackless-3.5.4
  stackless-3.7.5

Para instalar uma dessas versões, utilize:

pyenv install 3.8.5

No macOS, talvez você precise indicar alguns parâmetros opcionais, para indicar o local da zlib:

CPPFLAGS="-I$(brew --prefix zlib)/include" pyenv install -v 3.9.0

Visualizando as versões instaladas

Este comando abaixo retornará uma lista de versões instaladas pelo pyenv.

pyenv versions

Escolhendo a versão que deseja utilizar

pyenv global 3.9.0

PS: Deixo aqui também uma menção ao podcast Talk Python To Me #279, onde o entrevistado é o próprio Sebastian, falando sobre o assunto da sua palestra.