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.

Anúncios

6 comentários sobre “Gerenciando versões do python com o pyenv

  1. Muito bom Allisson.

    Só uma dúvida:
    Para deixar o 2.7.5 global, ao invés de:
    pyenv global 2.7.5 3.3.2
    não seria apenas
    pyenv global 2.7.5 ?

    Outra coisa, já ouviu falar do pythonbrew? Uso ele atualmente para essa finalidade de várias versões do python em um pc com seus diretórios diferentes.

  2. No caso informando o 2.7.5 e 3.3.2 o python fica linkado no 2.7.5, mas o python3 fica disponível também.

    Sobre o pythonbrew, eu ia usar ele, mas no readme dele no github ele diz que o desenvolvimento parou e sugere o pyenv 🙂

  3. Ai Allisson firmeza? 😀
    bom, dei uma olhadinha no seu post, parabéns, ficou bem legal.
    mais tenho uma duvida, não sei se estou errado, caso esteja errado você já me ajuda. srsrs.
    bom, ele gerencia as versões do python certo ?
    digamos que eu instalo o virtualenv para o django, ele usa o python padrão do sistema, certo ?
    como eu vou especificar pro virtualenv qual versão do python ele deva usar ?
    espero que eu esteja certo nas minhas duvidas. srsrs.
    vlw

    1. Você usa o python do pyenv e instala o virtualenv nele 🙂

      No meu sistema eu fiz o pyenv globals 2.7.5 e 3.3.2, instalei o virtualenv e virtualenvwrapper, funcionou perfeito.

      Eu crio dois venvs para o gunstar, um com o python 2.7.5 e outro com o 3.3.2, quando eu vou criar para versão 3.3.2 eu especifico o interpretador python usando a opção -p.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s