Ambientes virtuais em Python

Kauã Fillipe
Turing Talks
Published in
6 min readDec 4, 2022
Fonte: HP

Olá, querido leitor! Seja bem-vindo a mais um Turing Talks!

Imagine que você está trabalhando simultaneamente em vários projetos de programação, seja na sua empresa, grupo de extensão universitária ou uma iniciativa própria, utilizando a linguagem Python. Cada projeto possui suas próprias dependências, ou seja, cada um deles utiliza diferentes bibliotecas do Python ou ainda emprega diferentes versões de uma mesma biblioteca.

Nesse caso, não é nada prático instalar uma versão X de uma biblioteca para desenvolver um dos projetos e, depois, atualizá-la, repetidamente, para outras versões Y, Z, etc., que devem ser utilizadas em outros trabalhos.

Sabendo que alguns projetos são elaborados para a versão X da dependência e, desse modo, não conseguem ser rodados utilizando as versões Y, Z, etc., você percebe que não dá pra utilizar apenas uma versão dessa biblioteca para todos eles a não ser que adapte cada código para essa versão.

Além disso, as dependências de um projeto costumam ser atualizadas frequentemente, gerando, assim, sempre novas versões disponíveis de bibliotecas terceiras e superiores a quaisquer outras versões que você possa estar usando no seu trabalho agora. Com isso, você descarta a possibilidade anterior de usar apenas uma versão das bibliotecas para todos seus projetos.

Teria, então, alguma ferramenta que possibilite utilizar bibliotecas distintas e diferentes versões de uma mesma em vários projetos do seu trabalho?

Fonte: Tenor

Para sua felicidade, sim! Os ambientes virtuais existem justamente para isso. Nesse texto, trataremos brevemente sobre o que é um ambiente virtual do venv, o principal módulo do Python para criar ambientes virtuais, e de como utilizá-lo em seus projetos.

O que é um ambiente virtual?

Um ambiente virtual é um ambiente do Python utilizado para controle de dependências e isolamento de projetos. Nesse sentido, ele possui seu próprio conjunto de dependências e seu próprio binário Python (uma cópia da versão do Python utilizada para criar o ambiente virtual).

Dessa forma, as bibliotecas instaladas nele estão isoladas tanto das bibliotecas instaladas na versão do Python do sistema como das instaladas em outros ambientes virtuais. Isso ocorre porque a instalação é feita localmente em um diretório próprio do ambiente virtual utilizado e não globalmente no sistema (como aconteceria se você instalasse bibliotecas sem utilizar essa ferramenta).

Imagem 1. Ilustração de três ambientes virtuais distintos. Fonte: DATAQUEST

Portanto, cada ambiente virtual existe para uma versão específica do Python e para versões específicas das bibliotecas instaladas nele. Isso resolve a situação apresentada anteriormente, pois permite que vários projetos em Python utilizem versões diferentes dessa linguagem de programação e de pacotes instalados, sem que haja conflito, desde que cada projeto utilize um determinado ambiente virtual com suas respectivas especificações.

Vale ressaltar que o que é feito em um determinado ambiente virtual não afeta outros ambientes virtuais. Assim, você pode atualizar a versão de uma biblioteca, se for necessário, em um certo projeto, sem necessariamente atualizar a versão utilizada da mesma biblioteca em outros projetos.

Criando um ambiente virtual com o módulo venv

O principal módulo utilizado na criação de ambientes virtuais em Python é o venv (mas, claro, você pode utilizar outros se preferir). Ele permite que essa tarefa seja feita de modo fácil e prático e já vem instalado com o Python.

Para criar um ambiente virtual, basta fazer o seguinte:

python -m venv [NOME DO SEU AMBIENTE VIRTUAL]

Isso deve ser feito dentro do diretório do seu projeto e você pode nomear seu ambiente virtual da forma como quiser, mas, geralmente, utiliza-se ven ou .ven como nomes. Dessa forma:

python -m venv .venv

É possível ver que, dentro do diretório do ambiente virtual criado, há algumas pastas e um arquivo:

Imagem 2. Interface do Visual Studio Code com os subdiretórios do diretório do ambiente virtual criado.
  1. Include: inicialmente vazia, é utilizada para armazenar arquivos header em C no caso de você instalar pacotes em Python que dependa de extensões em C.
  2. Lib: contém bibliotecas padrão e é nela que serão armazenadas as bibliotecas específicas que você instalar para o seu projeto.
  3. Scripts: contém scripts Python para controle do seu ambiente virtual, como o interpretador Python da versão instalada e o pacote pip para instalação das bibliotecas de terceiros mencionadas.
  4. pyvenv.cfg: arquivo de configuração do seu ambiente virtual que contém chaves que indicam qual a versão do Python a ser instalada no ambiente (a mesma utilizada para criar o ambiente).

Em sistemas operacionais Linux e MacOS, existe ainda a pasta bin, que contém os arquivos executáveis (como o do pip e o interpretador do Python) e scripts de ativação do seu ambiente virtual. Alguns sistemas Linux podem ainda conter lib64, usada para instalar versões diferentes de bibliotecas com base em suas arquiteturas.

Depois da criação do ambiente virtual, é necessário ativá-lo. Para isso, basta:

  • No PowerShell (Windows):
[NOME DO AMBIENTE VIRTUAL]\Scripts\activate.ps1
  • No Command Prompt (Windows):
[NOME DO AMBIENTE VIRTUAL]\Scripts\activate.bat
  • No WSL ou Git Bash (Windows):
source [NOME DO AMBIENTE VIRTUAL]\Scripts\activate
  • No Linux ou MacOS:
source [NOME DO AMBIENTE VIRTUAL]\bin\activate

Para o Power Shell, certifique-se de que a execução de scripts está habilitada no seu sistema. Do contrário, não será possível ativar o ambiente virtual, devido às suas políticas de segurança.

No nosso caso, teríamos:

  • No PowerShell (Windows):
.venv\Scripts\activate.ps1
  • No Command Prompt (Windows):
.venv\Scripts\activate.bat
  • No WSL ou Git Bash (Windows):
source .venv\Scripts\activate
  • No Linux ou MacOS:
source .venv\bin\activate

Para sair do ambiente virtual, basta desativá-lo com o comando deactivate.

Fonte: Tenor

Arquivo requirements.txt

Após a ativação, todas as instalações de pacotes serão realizadas no ambiente virtual ativado e as bibliotecas ficarão armazenadas na pasta Lib. A instalação das dependências pode ser feita utilizando o sistema pip.

Em grandes projetos, principalmente se forem colaborativos, é interessante ter uma documentação das dependências do projeto para que os demais membros envolvidos, por exemplo, consigam reproduzir seu trabalho utilizando as bibliotecas necessárias nas versões específicas para as quais você o desenvolveu.

Essa situação é resolvida pelo arquivo requirements.txt, o qual lista as dependências de um projeto e as versões específicas de cada biblioteca utilizadas nele.

Imagem 3. Arquivo requirements.txt de um projeto aberto no Visual Studio Code.

Para gerar esse arquivo, uma possibilidade é, dentro do ambiente virtual, digitar o seguinte comando:

pip freeze > requirements.txt

E, para instalar os pacotes necessários a um projeto, a partir de um arquivo requirements.txt:

pip install -r requirements.txt
Fonte: Meme Creator

Conclusões

A criação de um ambiente virtual é fortemente recomendada quando se está trabalhando em um projeto no qual se programa usando Python. Ela resolve questões que dariam muita dor de cabeça se esse recurso não fosse empregado.

Um ambiente virtual permite isolar versões específicas das dependências de um projeto, inclusive a versão do Python utilizada, sem afetar os pacotes globais do sistema ou as bibliotecas utilizadas em outros projetos. Isso é extremamente positivo uma vez que possibilita um maior controle das configurações do seu ambiente Python e facilita o desenvolvimento de projetos colaborativos.

Nesse sentido, a criação de um arquivo requirements.txt é igualmente sugerida, pois permite a reprodução do projeto da forma como foi desenvolvido por outros colaboradores sem muito esforço.

Por hoje é só! Espero que você tenha gostado. Se quiser conhecer um pouco mais sobre o que fazemos no Turing-USP, não deixe de nos seguir nas redes sociais: Facebook, Instagram, LinkedIn e, claro, acompanhar nossos posts no Medium. Para acompanhar ainda mais de perto e participar de nossas discussões e eventos, entre no nosso servidor do Discord.

Um abraço, e até mais!

Referências

https://docs.python.org/pt-br/3/library/venv.html

https://docs.python.org/pt-br/3/tutorial/venv.html

https://realpython.com/python-virtual-environments-a-primer/

https://towardsdatascience.com/virtual-environments-104c62d48c54

https://www.youtube.com/watch?v=KxvKCSwlUv8

--

--