Thiago Krempser

Ambientes virtuais em Python

19 Abril 2019

Neste artigo explico o que são e como criar ambientes virtuais para nossos projetos em Python.

Sumário

Por que usar ambientes virtuais?

Se você gosta de Python tanto quanto eu, é grande a chance de você trabalhar em mais de um projeto ao mesmo tempo e no mesmo computador. Quando se trabalha em vários projetos, existe a chance de você usar versões diferentes de pacotes de terceiros — chamados também de site packages, em oposição aos system packages, que são os pacotes da biblioteca padrão do Python — ou até mesmo utilizar o Python 3 em um projeto e o Python 2 em outro.

Por padrão, todo pacote Python de terceiro que você instalar em seu computador irá ser armazenado na mesma pasta. No meu computador, esta pasta é:

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages

Para descobrir onde são instalados os pacotes no seu computador, abra o interpretador do Python e digite:

import site
site.getsitepackages()

Os pacotes são em uma subpasta com seu nome, não há diferenciação por número de versão e todos os projetos usam a mesma pasta citada anteriormente para buscar os pacotes de que dependem. Assim, ao atualizar um pacote, todos os projetos que por ventura façam uso deste, passarão a ter acesso a sua versão atualizada e isto pode causar conflitos de dependência.

Para ilustrar melhor, imagine que você esteja trabalhando em um projeto que dependa da pacote “B” na versão 1.0 e imagine também que este pacote não ofereça compatibilidade com versões futuras — infelizmente, isto pode acontecer. Suponha que algum tempo depois, você passa a trabalhar em um novo projeto que também fará uso do mesmo pacote “B” e queira usar a versão mais atualizada de “B”. Mas, como o pacote não possui backward compatibility, a atualização de “B” poderá causar conflitos de dependência no seu primeiro projeto, fazendo com que ele não se comporte exatamente como o esperado. Justamente em situações como esta que os ambientes virtuais podem nos ajudar.

O que são ambientes virtuais?

Ambientes virtuais são ambientes Python assim como o Python padrão que é instalado em seu sistema operacional, mas com a grande diferença de serem isolados. Os pacotes de terceiros e o próprio interpretador Python instalados em um ambiente virtual são exclusivos do mesmo e não podem ser acessados por outros ambientes virtuais e nem pelo Python padrão do sistema operacional. A grande vantagem desse isolamento dos ambientes virtuais é evitar a ocorrência de conflitos de dependência como aquele explicado na seção anterior.

Criando ambientes virtuais

No Python 3, para criar um ambiente virtual executamos no terminal (prompt de comando):

python3 -m venv my_venv

Com este comando, um ambiente virtual com o nome my_venv será gerado na forma de uma pasta com a seguinte estrutura:

my_venv/
├── bin
│   ├── activate
│   ├── pip
│   ├── python
│   └── ...
│   ...
└── lib
    └── python3.7
        └── site-packages
            └── ...

A pasta bin contém o interpretador python, o gerenciador de pacotes pip e outros arquivos usados para interagir com o ambiente virtual, como o activate que serve para ativar o ambiente virtual. Na pasta lib temos o subpasta site-packages na qual são gravados todos pacotes de terceiros que são obtidos pelo gerenciador de pacotes pip. Todos estes arquivos trabalhando em conjunto, garantem o isolamento do ambiente virtual.

Ativando ambientes virtuais

Para usar um ambiente virtual, é necessário ativá-lo usando o script activate conforme já adiantado na seção anterior. Para tal, basta executar:

source my_env/bin/activate

Após a execução, você notará que o prompt do seu terminal possui agora começa com (my_venv), isto quer dizer que você ativou seu ambiente virtual com sucesso e agora está trabalhando em um ambiente Python isolado daquele que está instalado em seu sistema operacional — e também de outros ambientes virtuais caso existam.


Thiago Krempser

Artigos sobre Python e Django escritos por Thiago Krempser. Siga-me no Github.