Criando ambientes virtuais para projetos Python com o Virtualenv

Quando estamos desenvolvendo diversos projetos em Python, é comum utilizarmos diferentes versões de uma mesma biblioteca entre este projetos. Por exemplo, imagine que estamos desenvolvendo o projeto x com a biblioteca mysqlclient em sua versão 1.0 e o projeto y com a mesma biblioteca, porém na versão 2.0. Como faríamos para gerenciar estas dependências e o sistema operacional saber qual versão correta executar quando estivermos em cada projeto?

Esta é uma tarefa um tanto quanto complexa para o SO gerenciar, podendo acarretar em conflitos entre as versões e causar muita dor de cabeça. Sendo assim, o mais comum é utilizarmos diferentes ambentes virtuais, chamados de virtualenvs, um para cada projeto. E é isso que veremos neste artigo 😀

O que é uma virtualenv?

Como dito acima, um problema muito comum é quando precisamos utilizar diversas versões de uma mesma biblioteca em diferentes projetos Python. Isso pode acarretar em conflitos entre as versões e muita dor de cabeça para o desenvolvedor. Para resolver este problema, o mais correto é a criação de um ambiente virtual para cada projeto.

Basicamente, um ambiente virtual empacota todas as dependências que um projeto precisa e armazena em um diretório, fazendo com que nenhum pacote seja instalado diretamente no sistema operacional. Sendo assim, cada projeto pode possuir seu próprio ambiente e, consequentemente, suas bibliotecas em versões específicas.

Como funciona uma virtualenv?

O funcionamento de uma virtualenv é bem simples. Basicamente, uma cópia dos diretórios necessários para que um programa Python seja executado é criada, incluindo:

  • PIP (Gerenciador de pacotes);
  • A versão do Python utilizada (2.x ou 3.x);
  • Dependências instaladas com o pip (armazenadas no diretório site-packages);
  • Seu código fonte;
  • Bibliotecas comuns do Python.

Isso faz com que as dependências sejam sempre instaladas em uma virtualenv específica, não mais no sistema operacional. A partir daí, cada projeto executa seu código-fonte utilizando sua virtualenv própria 🙂

Instalando a virtualenv

A instalação de uma virtualenv é feita utilizando o pip, gerenciador de pacotes do Python. Já falamos sobre o PIP em um outro artigo aqui do blog. Caso você não saiba do que se trata ou como instalá-lo, sugiro você dar uma passada por lá 🙂
Após instalar o pip, utilizamos o comando abaixo para instalar o pacote virtualenv em nosso computador:

pip install virtualenv

Feito isso, o pacote estará instalado e pronto para ser utilizado. Agora já podemos criar e gerenciar nossos ambientes virtuais.

Criando uma nova virtualenv

O processo de criação de uma virtualenv é bastante simples e pode ser feito utilizando um único comando, como podemos ver abaixo:

virtualenv nome_da_virtualenv

O mais comum é criar a virtualenv na raiz do projeto que ela irá pertencer. Isso permite uma organização maior das virtualenvs que possuímos em nosso computador:

Com isso, criamos a virtualenv do projeto chamada “venv”. É ela quem vai comportar todos os pacotes necessários para a execução do projeto.

Ativando uma virtualenv

Após criar uma virtualenv, precisamos ativá-la para que possamos instalar os pacotes necessários do projeto. Para isso, utilizamos o seguinte comando:

  • souce nome_da_virtualenv/bin/activate (Linux ou macOS)
  • nome_da_virtualenv\Scripts\activate (Windows)

O comando acima irá ativar a virutalenv e teremos um retorno similar ao ilustrado abaixo:

Note que o nome da virtualenv, agora, é exibido antes do caminho do diretório em que estamos. Isso indica que a virtualenv foi ativada com sucesso.

Desativando uma virtualenv

Para desativar uma virtualenv utilizamos o comando deactivate, como podemos ver abaixo:

Instalando pacotes

Com a virtualenv ativada, podemos instalar os pacotes necessários do projeto utilizando o próprio PIP:

Com isso, instalamos o pacote Django, em sua versão mais atual, na virtualenv do projeto “projeto_python”.

Agora, se precisarmos instalar uma outra versão do Django em outro projeto, bastaria criar uma nova virtualenv e realizar o mesmo processo:

Com isso, teremos diferentes versões do Django instaladas no mesmo sistema operacional, porém isoladas em cada ambiente. Sendo assim, o projeto “projeto_python” utiliza a versão mais recente (2.1.3) e o “projeto_python_2” utiliza a versão 2.11, tudo de forma isolada entre os projetos:


Concluindo

Com isso, vimos o quão importante e simples é utilizar uma virtualenv para cada projeto. Com isso, garantimos que as versões de cada pacote sejam isoladas, permitindo que não haja conflito entre elas.


author's picture

Fagner Pinheiro

Professor na TreinaWeb e graduando em Sistemas de Informação pelo Instituto Federal da Bahia. Apaixonado por desenvolvimento web, desktop e mobile desde os 12 anos de idade. Já utilizou todos os sistemas operacionais possíveis, mas hoje se contenta com o OSX instalado em seu notebook Samsung. Até passou em uma peneira do Cruzeiro, mas preferiu estudar Python.