Administrando Ambientes Virtuais com Conda
Tags: python, beginners, tutorial, datascience
Published: 2023-09-26 13:01:35

## Introdução

O dia a dia de um desenvolvedor está interligado ao uso de dezenas de bibliotecas e frameworks para as mais diversas funções. Algumas das bibliotecas mais famosas no ecossistema Python para Ciência de Dados são Pandas, Numpy, Matplotlib, Seaborn, Scikit-Learn, Tensorflow, entre outras. Todavia, conforme o profissional vai trabalhando em diversos projetos e atualizando essas bibliotecas, ele pode acabar caindo no problema de incompatibilidade de pacotes.

Suponhamos que há 10 anos um desenvolvedor chamado Carlos fez um projeto usando Python 2.7, mas hoje em dia já usa o Python 3.9. No entanto, por algum motivo, ele precisa revisitar aquele trabalho antigo. Quando vai tentar rodá-lo, se depara com algum tipo de erro, como um comando de Python 2.7 que não funciona mais em Python 3.9.

Como Carlos poderia resolver esse problema? Talvez nunca mais atualizando as bibliotecas que ele usa? Essa definitivamente não é uma solução satisfatória, então o que fazer? É aí que ambientes virtuais entram. Um ambiente virtual é como um espaço onde você pode guardar as versões de softwares que você quer que rode nele. De forma mais técnica, um ambiente virtual é um diretório com arquivos python executáveis e outros tipos de arquivo que indicam que ele é um ambiente virtual.

Com um desses, Carlos tem mais controle sobre quais pacotes estão sendo usados e em qual versão eles estão, pois sempre que um script for rodado dentro de um ambiente virtual, o script vai rodar com as exatas mesmas versões que foram configuradas na hora de escrevê-lo, a menos que o contrário seja especificado.

Mas como usar isso? Na verdade, existem várias ferramentas para usar as "virtual envs" (ambientes virtuais), tais como o venv, o pyenv e o que será o nosso foco nesse artigo, o conda. Conda é um gerenciador de pacotes das linguagens Python e R, mas também é muito conhecido como um gerenciador de ambientes virtuais. Ele faz parte do Anaconda, um conjunto de ferramentas muito usado por cientistas de dados, como o Jupyter-Notebook, por exemplo.

Nesse artigo, iremos pular a etapa de instalação do Anaconda, pois imagina-se que a maioria dos profissionais e estudantes da área de dados já o use. Esse artigo é feito usando terminal de comandos Linux Fedora, mas funciona na maioria das distribuições Linux.

## O ambiente padrão

Se você é um iniciante na área de computação ou veio de um background diferente da tecnologia, suas primeiras experiências com o terminal de comando Linux podem ter sido assustadoras. Ao instalar o Anaconda pela primeira vez em sua distribuição favorita, pode ter se deparado com o marcador "(base)" antes do seu nome de usuário e do nome da sua máquina na linha de comando BASH, como mostrado a seguir.

```bash
(base) [user@machine ~]$ 
```

Seu primeiro reflexo pode ter sido reiniciar o terminal ou pesquisar como tirar esse (base) estranho dele no Google, mas na verdade, isso já é um ambiente virtual - o ambiente padrão do conda. Nele, estão incluídos todos os pacotes que o conda imagina que você usará como cientista de dados.

“Então, já posso programar à vontade nesse ambiente?”
Calma, por mais que este seja um ambiente virtual, ele é bastante genérico. Experimente rodar o comando.

```bash
(base) [user@machine ~]$ conda list
```

e veja a quantidade de pacotes existentes. Há muitos pacotes que você pode não precisar ou pode precisar em outra versão. Programar nesse ambiente não faz muita diferença em relação a programar sem nenhum ambiente.

## Criando um ambiente a partir da linha de comando

Vamos criar nosso próprio ambiente. Vamos supor que você precisa de um ambiente para um projeto que usa Python, Pandas e Numpy, todos em suas últimas versões, nesse caso, digite o comando

```bash
(base) [user@machine ~]$ conda create --name teste1 python pandas numpy
```

Comando grande, mas fácil de entender, `conda create` é o comando para criar um novo ambiente virtual, a flag `--name` e o texto que vem em seguida servem para definir qual será o nome desse novo ambiente (o nome do ambiente padrão é base, por exemplo) e todos as palavras a seguir são as bibliotecas, linguagens e frameworks que você quer nesse ambiente, no nosso caso python, pandas e numpy. Após esse comando, uma mensagem semelhante a essa vai aparecer:


![lista de pacotes que serão instalados](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1vjz8weisxm06w1zk0cw.png)

Basta você digitar “y” e apertar ENTER que todos os pacotes necessários serão instalados nesse novo ambiente, mas você ainda vai estar no ambiente padrão. Digite o comando

```bash
(base) [user@machine ~]$ conda info --envs
```


![ambientes virtuais criados na máquina](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u0q8zm2r1ogy7ecmwzm7.png)

Se tudo deu certo, você vai ter como resposta algo semelhante ou idêntico a isso. Para entrar no ambiente novo criado, basta digitar o comando

```bash
(base) [user@machine ~]$ source activate teste1
```

E pronto, você está no ambiente virtual selecionado, com as bibliotecas, linguagens e frameworks que você especificou. Para ter certeza que você está no ambiente correto, você pode ter dois tipos de feedback. Digitando novamente o comando

```bash
(teste1) [user@machine ~]$ conda info --envs
```

```bash
# conda environments:
#
base                     /home/user/anaconda3
teste1                *  /home/user/anaconda3/envs/teste1
```

Note que tem um asterisco (*) ao lado de teste1 ao invés de base, e, se você for atento já pode ter percebido, que (teste1) está escrito no começo da última linha do terminal de comando, enquanto antes era (base). Agora é só desenvolver sua aplicação.

## Especificando as versões que você quer

Você pode também deixar explicito quais versões das bibliotecas, linguagens e frameworks você quer. Basta especificar essas versões logo após o nome da biblioteca e de um igual, dessa forma:

```bash
(teste1) [user@machine ~]$ conda create -n teste2 python=3.6 pandas numpy=1.16
```

Note que, como no caso do pandas, quando a versão não é especificada, a última versão é a instalada. Note também que você pode simplificar a flag `--name` como `-n`, isso serve para a maioria das flags, fica a seu critério.

## Administrando Pacotes

Após criar um ambiente virtual, você pode precisar instalar algum outro pacote ou mesmo atualizar um já instalado (cuidado com o problema de compatibilidade, não jogue fora o potencial dos ambientes virtuais). Nesse caso, você pode procurar se um pacote está disponível com o comando

```bash
(teste1) [user@machine ~]$ conda search beautifulsoup4
```

Com ele, o conda vai listar todos os pacotes disponíveis com esse nome, em todas as versões disponíveis no repositório Anaconda. Assim, sabemos se ele está disponível. Você pode escolher uma das versões que aparecem para você, ou somente instalar a versão mais recente com

```bash
(teste1) [user@machine ~]$ conda install beautifulsoup4
```

Esse pacote vai ser instalado somente no ambiente virtual em que você está, e você pode ver se ele foi instalado corretamente usando 

```bash
(teste1) [user@machine ~]$ conda list
```

## Conclusão

Pudemos ver que com poucos comandos, que são muito intuitivos, podemos construir um ambiente virtual completo usando conda. Como dito no começo do artigo, existem outros gerenciados de ambientes virtuais para Python e muitos outros para outras linguagens. 

O conda e o próprio Anaconda são muito mais completos que os primeiros comandos que ensinei por aqui, mas espero que eles tenham servido de base para futuros aprendizados. Obrigado pela leitura atenciosa, espero vocês no próximo artigo.