Python Virtual Environments com venv

Rodrigo Vieira
OperacionalTI
Published in
3 min readDec 11, 2015
PEP 405

O uso de ambientes virtuais no Python já está consagrado através de ferramentas bem populares como virtualenv e virtualenvwrapper. No entanto, a partir do Python 3.3 temos o módulo venv que implementa o gerenciamento de ambientes virtuais de acordo com a PEP 405. Porém, o módulo venv não disponibiliza todas as funcionalidades fornecidas pelas ferramentas de terceiros citadas acima.

Usando venv

Veja como é simples usar o novo módulo venv para criar seus próprios ambientes virtuais.

python -m venv caminho/para/o/novo/ambiente

ou

pyenv caminho/para/o/novo/ambiente

Para criarmos um ambiente onde desenvolveremos com Django 1.8:

$ pyenv ~/.pyenv/django_1.8
$ cd ~/.pyenv/django_1.8
$ source bin/activate
(django_1.8)$ pip install django==1.8.7
(django_1.8)$ cd ~/Projetos
(django_1.8)$ django-admin newproject blog

Perceba que estou padronizando o local dos meus ambientes virtuais em ".pyenv" dentro da minha pasta pessoal. Você pode escolher qualquer outro lugar, mas eu aconselho fortemente que você mantenha todos seus ambientes virtuais na mesma pasta.

Após criado o ambiente, basta ativá-lo e instalar a versão desejada do django e quaisquer outros pacotes.

Se você quiser criar um segundo ambiente, com a versão mais recente do django, basta seguir os comandos abaixo:

$ pyenv ~/.pyenv/django_1.9
$ cd ~/.pyenv/django_1.9
$ source bin/activate
(django_1.9)$ pip install django
(django_1.9)$ cd ~/Projetos
(django_1.9)$ django-admin newproject blog2

Bacana, simples, mas meio repetitivo ter que ficar entrando na pasta do ambiente virtual desejado e ativando sempre que quiser trabalhar com ele.

É aí que entra uma outra ferramenta…

pyenv-virtualenv

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, não sendo por isso redundante como as antigas ferrametnas virtualenv e virtualenvwrapper (apesar de que recentemente elas foram atualizadas para também utilizarem o módulo venv).

Instalação

No OSX basta utilizar o homebrew:

brew update
brew install pyenv-virtualenv

Em seguida adicionar duas linhas ao seu ~/.bash_profile

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Agora precisamos instalar a versão desejada do Python no pyenv, já que ele isola totalmente seu ambiente, inclusive a versão do Python.

pyenv install -l      # lista as versões disponíveis
pyenv install 3.5.1 # instala a versão 3.5.1 para o pyenv
pyenv shell 3.5.1 # usa a versão 3.5.1 no shell corrente
python -V # deve retornar: Python 3.5.1
cd ~/.pyenv # local onde ficam os ambientes virtuais
ls -l
ls -l versions

Perceba que podemos instalar qualquer uma das versões listadas pelo comando "pyenv install -l".

Usando pyenv-virtualenv

Agora vamos criar um novo virtualenv para trabalhar com django:

$ pyenv virtualenv 3.5.1 django_latest
$ pyenv virtualenvs
$ pyenv activate django_latest
(django_latest)$ pip install django
(django_latest)$ which django-admin

Primeiro criamos o novo ambiente virtual chamado django_latest definindo a versão 3.5.1 do Python para ser utilizada neste novo ambiente. Depois listamos os ambientes existentes e ativamos o django_latest. Já dentro do ambiente instalamos a versão estável mais recente do django através do pip. Por último verificamos que o utilitário django-admin já está disponível.

Uma vez criado o ambiente virtual e instalado os pacotes desejados, você já pode criar um novo projeto django e definir o virtualenv utilizado no arquivo .python-version. Dessa forma, sempre que você entrar na pasta do seu projeto, o ambiente será ativado automaticamente. Veja:

Criando o projeto:

$ pyenv virtualenvs # verificando quais meus ambientes
$ pyenv activate django_latest
(django_latest)$ django-admin startproject blog
(django_latest)$ cd blog
(django_latest)$ pyenv local django_latest

O comando pyenv local <virtualenv>, cria o arquito .python-version com o nome do virtualenv em seu interior. Assim, sempre que você acessar a pasta do projeto o virtualenv será ativado automaticamente.

$ django-admin         # command not found
$ cd ~/blog
(django)$ python -V # exibe Python 3.5.1
(django)$ cd ..
$ python -V # exibe Python 2.7.10

Fonte: http://tbb.co/managing-python-on-os-x-with-pyenv/

--

--