Python Virtual Environment

O pyenv-virtualenv é um plugin para o pyenv que nos fornece facilidades no gerenciamento de ambientes virtuais. Ele faz uso da API do novo módulo venv.

Independente do seu objetivo, é recomendável ter seu ambiente de desenvolvimento python isolado por projeto.
Muitas vezes você terá a necessidade de trabalhar com diferentes projetos, ou diferentes versões do mesmo projeto, cada uma com suas próprias dependências.
É consenso entre desenvolvedores python que se utilize virtual environments. E nós vamos utilizar o pyenv-virtualenv para nos auxiliar nessa tarefa.

Estou trabalhando em um Macbook com macOS Sierra, mas as instruções abaixo devem funcionar para versões mais antigas do OS X também.

Se você ainda não utiliza o homebrew, agora é a hora de começar.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Instalando pyenv e pyenv-virtualenv

brew install pyenv pyenv-virtualenv

Atualize seu ~/.bash_profile para ativar o pyenv automagicamente:

#  ~/.bash_profile
#-----------------------------------
# Python Development Environment
#-----------------------------------
#
# pyenv
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
# pyenv-virtualenv
if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi
# Prompt changing will be removed from future release.
export PYENV_VIRTUALENV_DISABLE_PROMPT=1

Usando o pyenv

Instalando a versão estável mais recente para usar com o pyenv:

# Lista todas as versões disponíveis
pyenv install -l
# Instala a versão 3.5.2
pyenv install 3.5.2

Criando o ambiente

No meu caso, vou começar a trabalhar sobre o projeto mkdocs por isso vou criar um ambiente exclusivo para ele e suas dependências:

# Cria o ambiente mkdocs_env baseado na versão 3.5.2
pyenv virtualenv 3.5.2 mkdocs_env

Ativando o ambiente

Você não precisa estar dentro do diretório do projeto para trabalhar com o ambiente que criamos. Você pode simplesmente ativá-lo:

# Ativa o ambiente mkdocs_env
pyenv activate mkdocs_env
# Desativa o ambiente
pyenv deactivate
# execute python --version antes e depois ativar o ambiente
# perceba que a versão muda da padrão do sistema para a 3.5.2

Automatizando a ativação do virtualenv

Não sei vocês, mas eu sou bem preguiçoso e gosto de automatizar tudo! Ficar digitando pyenv activate e pyenv deactivate não é pra mim e a solução é muito simples.

Crie um diretório para o seu projeto, no meu caso:

mkdir ~/Code/mkdocs

Nessa pasta basta criar um arquivo chamado .python-version e sempre que entrarmos nessa pasta o pyenv irá detectá-lo e ativar o ambiente. Quando saírmos da pasta, o ambiente é desativado. Não acredita em mim? Vamos testar:

# Define a versão ou virtualenv que queremos usar no projeto
echo "mkdocs_env" > ~/Code/mkdocs/.python-version
# Entrar na pasta ativa o virtualenv automagicamente
python --version # deve exibir "Python 2.7.10"
cd ~/Code/mkdocs
python --version # deve exibir "Python 3.5.2"
cd ..
python --version. # deve exibir "Python 2.7.10"

Maravilha! Pra finalizar, sempre que estiver no seu virtualenv você pode utilizar o pip, para instalar dependências unicamente para esse projeto. Duh! Era nesse ponto que queríamos chegar, por isso escrevi o artigo.

Se alguma coisa não ficou claro, perguntem.

Mais detalhes.


Gostou? Então recomende.
Obrigado!