sexta-feira, 30 de outubro de 2015

Usando Anaconda Python para Computação Científica

Durante o processo de pesquisa, frequentemente utilizo máquinas remotas de grande porte para executar meus códigos. Eventualmente também uso Windows e é necessário que todo meu código não só funcione como seja fácil de instalar. Uma das soluções padrão seria utilizar virtualenv para instalar pacotes somente para o meu usuário, mas além de isto não ajudar muito no caso Windows, tive diversos problemas com virtualenvs quebrando quando utilizados em máquinas diferentes. Recentemente resolvi testar uma distribuição chamada Anaconda Python que é voltada para computação científica. O Anaconda Python possui diversas vantagens em relação aos pacotes Python "padrão":

  1. A instalação padrão do Anaconda contém a maioria das bibliotecas científicas comumente usadas;
  2. Não é necessário possuir privilégios de administrador para instalar pacotes nem mexer com virtualenvs;
  3. O comando conda, incluso na distribuição, é de fácil utilização e permite instalar pacotes pré-compilados (muito útil em Windows) e diversas versões de Python ao mesmo tempo. Em muitas situações substitui ambos pip e virtualenv.
  4. Em Windows, ele já vem configurado para compilar extensões em C (ou Cython) usando o mingw (somente 32 bits, por enquanto).

É claro que também podem existir desvantagens, sendo que na minha opinião a principal é que pacotes comerciais instalados no sistema podem não funcionar imediatamente.

Instalação

A instalação é bem simples e não acho que valha muito a pena perder com ela aqui. Em Windows, é um instalador Next -> Next -> Next como todos os outros. Em Linux basta baixar o instalador e executá-lo no terminal. Tudo muito simples. Nas minhas instalações, mesmo em Windows, eu sempre escolho como destino uma pasta dentro do meu home e deixo o instalador sobrescrever o PATH para que o python padrão nos meus terminais seja o Anaconda.

Instalação de pacotes

Primeiramente, o comando pip funciona normalmente, assim como todos os outros módulos relacionados à instalação de pacotes (easy_install, setuptools, etc). O Anaconda Python vem com uma ferramenta adicional chamada conda, que permite a instalação de pacotes pré-compilados. A sintaxe do comando é a mais simples possível:

\$ conda install nome_do_pacote

Nem todos os pacotes do PyPI estão disponíveis, mas a quantidade que está é bem grande mesmo em Windows. Existem duas grandes vantagens em utilizar o conda:

  1. Pacotes enormes, como Numpy, Scipy ou Scikit-learn, ou cheios de dependências e complicados de instalar, como o Numba, podem ser instalados rapidamente, sem esperar um bom tempo pela sua compilação ou sem precisar caçar dependências manualmente;
  2. É muito mais fácil instalar pacotes que usam extensões em Windows, já que compilar pacotes nesta plataforma é sempre complicado;

Lembrando que como a instalação é normalmente feita na área do usuário, nem pip nem conda necessitam de privilégios especiais para instalar novos pacotes.

Ambientes virtuais com conda

O conda também suporta a instalação de diversas versões de Python utilizando ambientes virtuais. Um ambiente virtual é uma instalação Python feita inteiramente em um diretório. Podemos ter diversos ambientes instalados e cada um terá sua versão do Python e seus pacotes armazenados separadamente. Ao ativarmos um ambiente virtual, os comandos python, pip, etc e o caminho de busca dos pacotes são substituídos pelos caminhos do ambiente virtual. A partir da ativação, qualquer comando Python usará as bibliotecas e o interpretador do ambiente virtual. A utilização de ambientes virtuais é comum quando desenvolvemos vários projetos paralelamente, de modo que cada projeto tem seu ambiente separado com somente os pacotes necessários instalados. É prático e evita inconvenientes como versões de pacotes incompatíveis ou diferentes para cada projeto.

Para criar um ambiente virtual utilizamos

\$ conda create -n nome python=X.Y lista de pacotes desejados

E para ativá-lo

  • \$ source activate nome (Linux, MacOSX)
  • \$ activate nome (Windows)

Também podemos listar os ambientes instalados:

\$ conda info --envs

O Anaconda também disponibiliza um resumão de todos os comandos do conda que é muito útil.

Minha experiência pessoal

Trocar os meus virtualenvs pelo Anaconda Python me ajudou a migrar definitivamente para Python 3, além de acabar com o inferno de virtualenvs quebrando sozinhos quando usados em máquinas usando NFS. Também é muito conveniente instalar os pacotes rapidamente sem precisar esperar o tempo de compilação e ter a grande maioria dos pacotes que uso disponíveis na instalação padrão. E a grande vantagem de tudo é que é tudo Python, não existe nenhuma extensão ou diferença em usar o Anaconda ou a distribuição padrão. Particularmente, eu recomendo a todos que precisam de um ambiente completo rapidamente.

Bônus - IDE Spyder

A instalação padrão do Anaconda contém a IDE Spyder que é muito útil para desenvolvimento de aplicações científicas. De certa maneira, Spyder tem várias características em comum com o Matlab, mas usa Python e é Open Source. Acho que a imagem abaixo mostra claramente o poder deste ambiente. Vale a pena dar uma conferida ;)

8 comentários:

  1. Ola Igor. Estou começando a estudar python com objetivo científico. Preciso de redes neurais, processamento de imagem e otimização. Alem de pacotes como algoritmo genético, etc. etc... Tudo isso usando o Anaconda (spyder). Voce poderia me indicar um material para facilitar o aprendizado? Preciso mais de funcionalidades como instalar pacotes e outros detalhes. Quando a lógica de programação estou ok. Atualmente estou utilizando win 8.

    ResponderExcluir
    Respostas
    1. Sarvio, acredito que você possa dar uma olhada nas bibliotecas numpy (operações com matrizes, álgebra linear e computação numérica em geral), scipy (algumas coisas de otimização e estatística) e no scikit-learn (muitos tipo de classificadores e algoritmos de aprendizagem de máquina). Você consegue instalá-las usando o conda mesmo e todas as 3 tem documentação muito boa.

      Para imagens você pode testar ou o scikit-image ou o pillow. Ambas são boas, então pode ser uma questão de gosto mesmo.

      Excluir
    2. Você também vai precisar de um pacote chamado igraph para estudar network, ele pode ser obtido em http://hal.elte.hu/~nepusz/development/igraph/tutorial/install.html

      Tentei seguir as instruções mas não consegui instalar.
      Caso alguém ai consiga, favor entrar em contato leoaguiar21@yahoo.com.br

      Excluir
    3. Olá Igor, estou tentando estudar Python para desenvolver algumas aplicações, porém não consigo faze certos procedimentos, como importar a biblioteca correspondente ao meu objetivo. É algo básico, mas não sei se o Python vai me suprir. O objetivo é traçar uma linha de raciocínio lógico como ferramenta de estudo, no caso queria usar apenas jogos de palavras, utilizando implicações, negação, disjunções entre elas etc. Mas não achei ainda a biblioteca ou não sei ainda como utilizar isso na plataforma Python. Aceito qualquer ajuda.

      Excluir
  2. Olá Sárvio, tenho uma dúvida.

    Muitas vezes alguns pacotes demoram muito para serem rodados acredito eu por não estarem no anaconda2. Pergunto se é essencial que eu coloque todos os pacotes dentro desta pasta ou pode sem em qualquer lugar?

    ResponderExcluir
  3. Este comentário foi removido por um administrador do blog.

    ResponderExcluir
  4. Olá Igor. Boa tarde. Igor estou com um problema de instalação de pacotes no Python. Eu uso o comando 'pip install tensorflow' e não consigo baixar o pacote. Fui buscar informação com uns colegas que usam o python a mais tempo e a indicação deles foi criar um ambiente dentro do meu python. Um deles me passou esse link e gostaria de saber se você teria como me ajudar neste probleminha. Abraços.

    ResponderExcluir