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.
Gostou? Então recomende.
Obrigado!