Crash course de conda¶
Objetivos¶
Aprender a utilizar o conda para gerenciar a instalação de pacotes, dependências e ambientes;
Entender conceitos de distribuição, módulo e repositório;
Compreender comandos do conda e praticá-los em terminal;
Pré-requisitos¶
Instalação da distribuição Anaconda (recomenda-se Python 3.x);
Acesso simples a um terminal ou ao Anaconda Prompt;
Introdução¶
conda é um gerenciador de pacotes, dependências e ambientes para múltiplas linguagens;
Pacote de código aberto executável em Windows, macOS e Linux;
Seu objetivo é fornecer suporte à rápida instalação, desinstalação e atualização de pacotes
Embora criado para Python, hoje pode ser aplicado a softwares escritos em R, Ruby, Lua, Java, Javascript, C++ etc.
Atualmente, há cerca de 7500 pacotes gerenciados no repositório repo.anaconda.com que são mantidos pela empresa Anaconda Inc.
Benefícios do conda para cientistas de dados¶
Fornece pacotes pré-construídos que evitam a necessidade de lidar com compiladores ou saber como configurar uma ferramenta específica;
Gerencia instalações de ferramentas que são mais difíceis de instalar (como TensorFlow) com apenas um passo;
Permite que você forneça seu ambiente a outras pessoas em diferentes plataformas, assim oferecendo suporte à reprodutibilidade de fluxos de trabalho de pesquisa;
Permite o uso de outras ferramentas de gerenciamento de pacotes, tais como pip, dentro de ambientes conda onde uma biblioteca ou ferramentas ainda não foram empacotadas para conda;
Fornece bibliotecas e ferramentas de ciência de dados comumente usadas, tais como R, NumPy, SciPy e TensorFlow. Estes são construídos usando bibliotecas específicas de hardware otimizadas (como MKL da Intel, ou CUDA da NVIDIA) que aceleram o desempenho sem alterações de código.
Conceitos fundamentais¶
Anaconda: distribuição de código aberto, alto desempenho e otimizada para Python e R.
Anaconda Cloud: repositório de pacotes hospedado na web (nuvem)
Anaconda Navigator: interface gráfica incluída na distribuição para fácil gestão de pacotes, ambientes e canais.
Canal: local dos repositórios onde o conda procura por pacotes. Pode ser um repositório público, na web, ou privado, dentro da universidade, em uma empresa, na sua casa, etc.
conda: gerenciador de pacotes e ambientes que vem incluído na distribuição.
conda environment (Ambiente): diretório que contém uma coleção específica de pacotes e dependências que pode ser administrado separadamente. Por exemplo, é possível manter um ambiente Python 2 e Python 3 totalmente isolados sem que um interfira em outro.
conda package (Pacote): arquivo comprimido que contém todos os elementos necessários para o funcionamento de um software: bibliotecas, módulos, executáveis e componentes.
conda repository (Repositório, ou repo): o repositório em nuvem mantido pela Anaconda.
Miniconda: é uma versão menor da distribuição que inclui apenas pacotes essenciais, tais como
conda
,pip
,zlib
e outros considerados básicos. Pode ser expandido pela instalação de pacotes adicionais.noarch package (Pacote independente de arquitetura): pacote que não contém nada específico à arquitetura de um sistema e que pode ser instalado em qualquer plataforma.
noarch
constitui um subdiretório em um canal.Repositório: qualquer local onde ativos de software são armazenados e podem ser baixados ou recuperados para instalação e uso em computadores.
Note
Se você é novo com Python ou conda, recomenda-se instalar a distribuição Anaconda (inteira) em vez da Miniconda, embora mais tempo e espaço em disco sejam necessários. A distribuição padrão requer cerca de 3 Gb de espaço em disco, ao passo que a Miniconda ocupa em torno de 400 Mb.
Comandos fundamentais¶
A lista a seguir não é exaustiva e contempla os comandos conda
mais frequentes. Baseia-se na [Conda Cheat Sheet]
Aqui, dividiremos os comandos nos seguintes grupos:
informação e atualização
ambientes
pacotes e canais
adicionais
Comandos para manutenção e atualização¶
comando |
o que faz? |
---|---|
|
verifica se conda está instalado |
|
verifica instalação e versão do conda |
|
atualiza o gerenciador para a versão atual |
|
idem |
|
atualiza todos os pacotes da distribuição para versões estáveis |
Comandos para trabalhar com ambientes¶
comando |
o que faz? |
---|---|
|
cria novo ambiente com nome “AMB” para funcionar com a versão Python 3.x e instala neste ambiente os pacotes PKG1 e PKG2, sendo o primeiro na versão específica “v.s” e o outro a estável mais atual |
|
ativa o ambiente de nome AMB |
|
ativa um ambiente dado seu local |
|
desativa o ambiente ativo |
|
lista todos os pacotes do ambiente ativo |
|
lista todos os pacotes do ambiente AMB |
|
deleta todo o ambiente AMB |
|
faz um clone NAMB de AMB |
|
exporta configurações de AMB em um arquivo YAML |
|
cria AMB a partir de configurações contidas em um arquivo YAML |
Note
YAML (acrônimo para “YAML Ain’t Markup Language”) é uma linguagem de serialização de dados legível por humanos comumente usada para organizar arquivos de configuração. É utilizada em múltiplas linguagens. Veja [YAML].
Warning
conda activate
e conda deactivate
somente funcionam a partir das versões 4.6 do conda
. Para versões anteriores, no Windows usa-se activate
/deactivate
e no macOS, usa-se source activate
/source deactivate
.
Comandos para trabalhar com pacotes e canais¶
comando |
o que faz? |
---|---|
|
procura pelo pacote PCT nos canais configurados cuja versão esteja no intervalo 2.8 <= v < 3.2 |
|
instala o pacote PCT, se disponível |
|
instala o pacote AMB a partir do canal CH |
|
instala o PCT com a versão especificada (4.1.0) |
|
instala pacote com uma das versões especificadas (OU) |
|
instala uma das das versões do pacote especificadas (E) |
Note
A lista de canais padrão utilizadas pela distribuição fica armazenada no arquivo oculto .condarc
. A partir do caderno interativo, execute o comando !cat ~/.condarc
para uma visão geral do conteúdo do arquivo .condarc
.
Comandos adicionais¶
comando |
o que faz? |
---|---|
|
fornece informação detalhada sobre o pacote AMB |
|
remove pacotes inutilizados |
|
remove o pacote PCT do ambiente AMB |
|
atualiza todos os pacotes do ambiente AMB |
|
instala pacotes sem exigir prompt do usuário |
|
para obter ajuda sobre os comandos disponíveis do gerenciador |
Tip
Em muitos casos, opções de comandos que são precedidas por 2 hífens (--
) podem ser abreviadas para apenas 1 hífen e a primeira letra da opção. Então, --name
e -n
, bem como --envs
e -n
são opções equivalentes.
Exemplos¶
Criar ambiente chamado “dataScience” com versão Python 3.8 contendo os pacotes numpy, versão 1.19.1, e pandas, mais atual no repositório Anaconda.
conda create --name dataScience python=3.8 numpy=1.19.1 pandas
Alternar entre ambientes
Abaixo, vamos reproduzir a mudança de um ambiente para outro em um Z Shell apontando para a pasta ICD e mostrar que o pacote scipy
está instalado em um ambiente, mas não em outro.
# no ambiente 'base', procuramos pelo pacote 'scipy'
(base) gustavo@GloryCrown ICD % conda list scipy
# packages in environment at /Users/gustavo/opt/anaconda3:
#
# Name Version Build Channel
scipy 1.6.2 py38hd5f7400_1
# ativamos um novo ambiente chamado 'lecture'
(base) gustavo@GloryCrown ICD % conda activate lecture
(lecture) gustavo@GloryCrown ICD %
# dentro do ambiente 'lecture', procuramos pelo pacote 'scipy'
(lecture) gustavo@GloryCrown ICD % conda list scipy
# packages in environment at /Users/gustavo/opt/anaconda3/envs/lecture:
#
# Name Version Build Channel
Nada é mostrado, significando que o pacote scipy
está indisponível no ambiente lecture
. Enfim, desativamos o ambiente ativo.
# desativamos 'lecture' e voltamos para 'base'
(lecture) gustavo@GloryCrown ICD % conda deactivate
(base) gustavo@GloryCrown ICD %
Criar arquivo YAML para construção de ambiente personalizado
Abra seu editor de texto preferido (sugestão: no Windows,
notepad++
; no Linux,gedit
; no macOS,TextEdit
);Salve o arquivo como
icd.yml
;Personalize o seu ambiente (use o modelo a seguir);
Use o comando
conda env create -f icd.yml
para criar o ambiente;Verifique se o ambiente foi criado corretamente com
conda env list
. Você deve ver algo como:
(base) gustavo@GloryCrown ICD % conda env list
# conda environments:
#
base * /Users/gustavo/opt/anaconda3
icd /Users/gustavo/opt/anaconda3/envs/icd
# Conteúdo do arquivo "icd.yaml"
# para construir o ambiente 'icd'
name: icd # nome do ambiente
channels: # lista de canais a utilizar
- defaults # canais padrão
- conda-forge
dependencies: # pacotes dependentes
- numpy
- scipy
- sympy
- matplotlib
- pandas
- seaborn
Tip
Quando você precisar atualizar o seu ambiente de ciência de dados, seja porque necessita de um pacote novo, ou porque encontrou um pacote melhor, basta atualizar o conteúdo do arquivo icd.yml
e então executar o seguinte comando: conda env update --file icd.yml --prune
. A opção --prune
faz com que o conda remova dependêncaias que não forem mais necessárias.
Desempenho do conda¶
A instalação de pacotes pode tornar-se lenta por uma variedade de motivos: processamento de metadados, velocidade de internt, verificação de dependências, etc. À medida que o número de pacotes disponíveis aumenta, a busca que o conda realiza pode perdurar por mais tempo.
Caso ao tentar instalar um pacote haja lentidão, há algumas questões a analisar. Verifique se há dependências instaladas via pip
; se os canais estão disponíveis; se o pacote que você está tentando instalar está disponível.
Para melhorar o desempenho consulte recomendações aqui.
Hint
Trabalhar com ambientes menores e dedicados é sempre melhor e mais rápido do que ter ambientes grandes, que são bem mais difíceis de gerenciar. Para ganhar desempenho, reduza a complexidade de seus ambientes.
Exercícios¶
Usando o
conda
, crie um novo ambiente de trabalho para o curso chamadoicd
.Ative o novo ambiente e instale:
o pacote
numpy
em sua versão mais recente;o pacote
scipy
na versão 1.6.0;
Execute o comando
conda list ncurses
. Qual é a resposta? Ele está instalado? Qual é a versão?Use um comando para buscar informações sobre a versão mais recente do pacote
sympy
. Quantas e quais são as suas dependências?Desinstale o pacote
scipy
. Quantos pacotes permaneceram em seu ambiente?Desinstale o pacote
numpy
. Algum pacote ainda permaneceu em seu ambiente? Por quê?Desative o ambiente
icd
e delete-o completamente.Crie um novo ambiente personalizado
icd
a partir de um arquivo YAML.