Trabalhando com virtualenv no Python

Um dos grandes problemas enfrentados no Python é garantir que todas as versões de bibliotecas são as corretas para determinado projeto. Principalmente quando estamos falando do compartilhamento de código, isto é, o programa funciona perfeitamente na máquina de quem desenvolveu mas quando muda-se de máquina ou o código é enviado para outro usuário ele não roda por falta das dependências utilizadas durante o desenvolvimento.

Outra questão é a “quebra” de projetos anteriores, isto é, com o uso desenfreado do pip install durante um novo projeto, as versões que funcionavam para um código deixam de funcionar.

Para solucionar esse problema, apresentamos aqui um passo-a-passo de como trabalhar com o virtualenv, ele é responsável por permitir um gerenciamento da configuração dos pacotes por projeto (pasta de trabalho), assim você não sai quebrando a configuração da máquina de trabalho e nem os projetos anteriores. É um passo para um desenvolvimento mais robusto.

A ideia desse artigo é servir também como uma referência dos comandos para um uso prático do virtualenv.

Instalando o virtualenv

Antes de tudo você precisa ter o virtualenv instalado na máquina, para isso, utilize o gerenciador de pacotes padrão do Python (pip), conforme segue:

$ pip install virtualenv

A partir de então estará pronto para começar a trabalhar com o virtualenv.

Criando um novo ambiente

Sempre quando se inicia um projeto, para permitir esse maior controle dos pacotes necessários, você primeiro cria um ambiente para seu projeto com o virtualenv, para isso faça o seguinte:

$ python -m venv nome_do_diretorio_virtual

O comando acima funciona tanto no Windows quanto no Linux. Para o nome_do_diretorio_virtual você pode escolher como quiser, eu utilizo .venv pois é um nome comum para uso, outros nomes muito comuns (venv, env, .env, ENV). O legal de usar esses nomes comuns é que o arquivo .gitignore padrão do Github para projetos em Python irá ignorar esse diretório quando você efetuar os envios (git pull) para o repositório.

Ativando seu ambiente

Após a criação do ambiente no passo anterior, caso você dê uma listagem dos arquivos na sua pasta de trabalho irá ver o diretório com o nome escolhido presente lá, mas seu ambiente virtual ainda não está funcionando, para iniciá-lo é necessário o activate.

Para o Windows faça da seguinte forma (você roda o script activate dentro da pasta .venv\Scripts:

PS C:\Users\Dir> .venv\Scripts\activate
(.venv) PS C:\Users\Dir>

Se aparecer na sua linha de comando o nome do seu ambiente criado, conforme exemplo acima com o (.venv), seu ambiente está funcionando e rodando corretamente.

Para o Linux/Mac o comando será:

$ source .venv/bin/activate
(.venv) $

Na linha de comando o comportamento será o mesmo aparecerá o (.venv), mas para isso será necessário utilizar o comando source.

Uso, compartilhamento e desativação

Após o ambiente funcionando e rodando conforme passo anterior, tudo que for feito dentro do virtualenv, com relação à instalação de pacotes, estará restrita ao diretório de trabalho, portanto, se seu código faz uso de um pacote específico, por exemplo:

(.venv) $ pip install requests

O pacote requests estará disponível para os códigos desenvolvidos no ambiente virtual, mas não para todos os códigos em sua máquina.

Para que você possa compartilhar seu projeto com todas as dependências necessárias (pacotes instalados com o pip), é comum encontrar um arquivo chamado requirements.txt, esse arquivo é gerado com o próprio pip através do comando pip, conforme segue:

(.venv) $ pip freeze > requirements.txt

Lembre de executar esse comando com o ambiente ativo (veja o .venv na linha de comando). Esse arquivo requirements.txt possui todas as bibliotecas necessárias para o projeto funcionar e são aquelas que você instalou com o pip install durante o desenvolvimento. O conteúdo desse arquivo são os pacotes e suas versões respectivas, veja um exemplo:

numpy==1.18.2
pandas==1.0.3
requests==2.23.0
Scrapy==2.0.1

Assim quando você for compartilhar seu código você disponibiliza também o arquivo requirements.txt para o trabalho ser reprodutível.

Finalmente, para desativar o virtualenv, para o Windows e Linux/Mac são o mesmo comando deactivate:

(.venv) $ deactivate
$

Utilizando o requirements.txt

Um último ponto é como partindo do arquivo requirements.txt pode-se construir o mesmo ambiente ?

Para isso, considere os passos anteriores para criar um ambiente virtual e assim que o ambiente estiver ativo (activate), rode o seguinte comando:

(.venv) $ pip install -r requirements.txt

Pronto, seu .venv estará com a mesma configuração presente no requirements.txt.

Usando virtualenv com IDEs

Caso você trabalhe com alguma IDE, normalmente é possível você selecionar o ambiente virtual para trabalho.

Tendo o PyCharm como referência, você pode utilizar o Terminal dentro dele para realizar os passos anteriores e configurar na IDE via File > Settings > Project Interpreter, o ambiente virtual estará como opção de uso.

Vide figura:

Selecionando o ambiente virtual na IDE PyCharm

Note também que os pacotes disponíveis nesse .venv são específicos e com versões também específicas.

Ao compartilhar seu trabalho com o requirements.txt e utilizando-se do virtualenv, você garante que em outra máquina o ambiente será o mesmo daquele durante o desenvolvimento. Assim acabando com aquela máxima: “Mas no meu computador funciona…”

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Este site utiliza o Akismet para reduzir spam. Fica a saber como são processados os dados dos comentários.