Gerenciando versões do python com o pyenv

Em uma pesquisa rápida eu encontrei o pyenv, que segue os mesmos princípios do rbenv para ruby.

O que o pyenv nos oferece:

  • Instalação do interpretador python usando o $HOME do usuário
  • Instalação de várias versões diferentes do python, cada uma com seu diretório isolado

Atualmente eu estou utilizando o vagrant com o box do precise32 (ubuntu 12.04 lts), ele vem com o python 2.7.3 e com a opção de instalar o python 3.2.3, mas eu queria ter as últimas versões estáveis (atualmente 2.7.5 e 3.3.2), o pyenv resolve esse problema.

Primeiro precisamos instalar as dependências:

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install build-essential git-core
sudo apt-get install libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev

Clonando o pyenv no $HOME do seu usuário:

cd
git clone git://github.com/yyuu/pyenv.git .pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init -)"' >> ~/.profile
exec $SHELL

Faça o logout/login e volte ao seu terminal, para ver quais são as versões que você pode instalar execute:

vagrant@precise32:~$ pyenv install -l
Available versions:
  2.4
  2.4.1
  2.4.2
  2.4.3
  2.4.4
  2.4.5
  2.4.6
  2.5
  2.5.1
  2.5.2
  2.5.3
  2.5.4
  2.5.5
  2.5.6
  2.6.6
  2.6.7
  2.6.8
  2.6-dev
  2.7
  2.7.1
  2.7.2
  2.7.3
  2.7.4
  2.7.5
  2.7-dev
  3.0.1
  3.1.3
  3.1.4
  3.1.5
  3.1-dev
  3.2
  3.2.1
  3.2.2
  3.2.3
  3.2.4
  3.2.5
  3.2-dev
  3.3.0
  3.3.1
  3.3.2
  3.3-dev
  3.4-dev
  jython-2.5.0
  jython-2.5.1
  jython-2.5.2
  jython-2.5.3
  jython-2.5.4-rc1
  jython-2.5-dev
  jython-2.7-beta1
  jython-dev
  pypy-1.5
  pypy-1.5-src
  pypy-1.6
  pypy-1.7
  pypy-1.7-dev
  pypy-1.8
  pypy-1.8-dev
  pypy-1.9
  pypy-1.9-dev
  pypy-2.0
  pypy-2.0.1
  pypy-2.0.1-src
  pypy-2.0.2
  pypy-2.0.2-src
  pypy-2.0-dev
  pypy-2.0-src
  pypy-2.1
  pypy-2.1-src
  pypy3-2.1-beta1
  pypy3-2.1-beta1-src
  pypy3-dev
  pypy-dev
  stackless-2.7.2
  stackless-2.7-dev
  stackless-3.2.2
  stackless-3.2-dev
  stackless-3.3-dev
  stackless-dev

Instalando o 2.7.5 e 3.3.2:

pyenv install 2.7.5
pyenv install 3.3.2
pyenv rehash # execute sempre depois de instalar um novo interpretador
pyenv global 2.7.5 3.3.2 # deixa o python 2.7.5 como o python padrão e também o 3.3.2 disponível

Para instalar o pypy você precisa instalar mais algumas dependências:

sudo apt-get install libffi-dev libssl0.9.8

Após isso precisamos criar um link simbólico para o libffi ser encontrado pelo pypy:

sudo ln -s /usr/lib/i386-linux-gnu/libffi.so.6 /usr/lib/i386-linux-gnu/libffi.so.5

Agora sim, pypy 2.1:

pyenv install pypy-2.1

Isso é o básico, no wiki do pyenv tem mais informações úteis.