Ambiente virtual Python com Virtualenv + Virtualenvwrapper no Ubuntu — Instalação e uso

Otavio Braga
3 min readMay 11, 2017

--

Quando trabalhamos com desenvolvimento utilizando Python é comum termos diversos projetos na mesma máquina. Estes projetos por sua vez tem dependências que podem compartilhadas mas as vezes podem estar em versões diferentes. Imagine, por exemplo, que você esteja desenvolvendo um software que utilize a versão mais nova da biblioteca requests, entretanto a versão instalada na máquina esteja um pouco desatualizada e não ofereça todos os recursos que a nova versão tem. Como resolver esse problema? E se a nova atualização da biblioteca só funciona em uma versão mais recente do Python?

Hoje não precisamos mais sofrer com problemas desse tipo quando estamos trabalhando com Python pois existe o virtualenv. De forma bem direta, exatamente como consta na documentação, o virtualenv é uma ferramenta para criação de ambiente virtuais isolados para Python. Desta forma o virtualenv possibilita a criação de ambientes virtuais que podem conter as mesmas bibliotecas em versões diferentes ou até mesmo com versões diferentes do Python.

Junto com o virtualenv existe também um wrapper que facilita a forma como trabalhamos com estes ambientes virtuais. Esse pacote é chamado vritualenvwrapper. O virtualenvwrapper oferece uma série de atalhos para utilizar o virtualenv, além de organizar todos os ambientes virtuais em um único lugar. Com o virtualenvwrapper é possível até mesmo trocar entre ambientes com um único comando.

No Linux, é possível instalar esse setup através dos seguintes comandos:

Após instalar com os comandos acima, o virtualenv ja pode ser utilizado. Entretanto, para o virtualenvwrapper funcionar corretamente é necessário fazer algumas configurações no Linux.

Primeiro precisamos editar o .bashrc e adicionar as seguintes linhas ao final do arquivo. O arquivo .bashrc pode ser encontrado dentro da pasta do usuário. Você pode editar ele de várias formas, entretanto a forma mais fácil é utilizando o nano.

Use este comando para editar o .bashrc

Lembrando que o arquivo .bashrc necessita de sudo para ser editado e salvo. Caso você não esteja conseguindo salvar o arquivo lembre-se de verificar se esta usando sudo. :)

Adicione estas linhas ao final do arquivo .bashrc

A primeira linha indica o local onde os ambientes virtuais serão salvos. O virtualenvwrapper usa a variável de ambiente WORKON_HOME para saber onde nós queremos salvar nossos ambientes. Desta forma nos definimos que eles serão salvos na pasta do usuário dentro da pasta oculta .virtualenvs. A segunda linha adiciona os comandos do virtualenvwrapper no bash.

Após editar o .bashrc precisamos atualizá-lo para podermos utilizar os novos comandos e criar a pasta onde os ambientes serão salvos. Para isso entre com os seguintes comandos no terminal:

O virtualenvwrapper possui diversos comandos para facilitar o trabalho com ambientes virtuais. Abaixo podemos ver os disponíveis e mais detalhes sobre cada um podem ser encontrados na documentação.

Os comandos mais utilizados por mim são workon e mktmpenv. Workon permite que eu troque de ambiente de forma rápida e sem precisar acessar a pasta do ambiente virtual. Já o mktmpenv possibilita a criação de um ambiente virtual temporário, que é automaticamente apagado quando não está mais sendo usado.

Para criar um ambiente virtual persistente basta usar o comando mkvirtualenv. Este comando também pode ser usado com um série de parâmetros que podem, por exemplo, definir pacotes a serem instalados após a criação do ambiente ou até mesmo a versão do Python que será instalada.

Ao se trabalhar com Python é muito comum termos que testar novas versões de bibliotecas. Então, para evitar a necessidade de ficar removendo bibliotecas para não poluir a nossa máquina de trabalho com coisas que não utilizamos mais, o virtualenv se torna uma ferramenta essencial. Para facilitar ainda mais o nosso trabalho temos o virtualenvwrapper, que junto com o virtualenv forma o setup perfeito para trabalharmos com ambientes virtuais. :)

--

--