Plugins com Eggs – Parte I

“O nome sugere alguma invenção gastronômica mas não é!”

Introdução

Normalmente quando falamos de plugins sempre os relacionamos a frameworks e aplicações. Sendo que cada framework ou aplicação tem seu próprio modo de tratar os componentes plugáveis. Lembro que quando desenvolvia em Jakarta Struts haviam plugins e os declarávamos no arquivo de configuração struts-config.xml para que eles fossem reconhecidos e carregados no framework. Outros frameworks tratam isso de forma diferente.

Como cada aplicação/framework tem seu próprio modo de tratar os plugins, o que faremos se quisermos criar uma aplicação customizável por meio de componentes? Terei de criar meu próprio modelo de plugins? A aplicação para carregar o plugin (que é o componente plugável) terá de saber onde encontrá-lo. Como dito anteriormente, podemos declará-lo em um arquivo de configuração; em outros casos, colocando-o numa pasta apropriada, para que a aplicação reconheça.

Em Python encontramos uma forma de criar plugins de forma genérica independente do tipo de aplicação. É sobre o que trataremos como tópico principal neste e outros dois posts.

Um pouco de história

A biblioteca padrão da linguagem Python possui um pacote chamado distutils criado para facilitar e padronizar a instalação de bibliotecas, scripts e aplicações. Funciona de modo semelhante ao makefile para C/C++. Os pacotes instalados com o auxílio do distutils contêm em sua pasta raiz um script Python nomeado setup.py. Nela existem as diretrizes do que vai ser colocado no diretório site-packages, quais scripts serão instalados e arquivos-fonte em C/C++ para serem compilados, além de outras coisas. Com a execução do script por meio do comando: python setup.py install ocorre o processo de instalação.

Surgiu depois uma extensão do distutils chamada Setuptools, na verdade um criativo projeto concebido para facilitar mais ainda a instalação e incremento da capacidade original do distutils.

Setuptools

Com o Setuptools veio um formato de distribuição e instalação chamado Egg. Ao contrário dos ainda bem utilizados arquivos compactados com as extensões .tar.gz e .zip, os eggs são arquivos compactados com a extensão egg. Além do conteúdo presente nos outros, os Eggs contêm um diretório de metadados. Um metadado importante é a informação de quais dependências a distribuição possui. Falaremos disso mais adiante.

O Setuptools também fornece um script (easy_install) para realizar as seguintes funções: procurar, baixar e instalar pacotes, sejam eles no formato convencional (tgz e zip), no formato Egg ou de repositórios Subversion. Programas com esse propósito não é novidade no mundo das linguagens de programação. Perl possui o CPAN para isso e Ruby tem o Gems. Sabe-se que futuramente Java terá um recurso similar quando seu formato de pacotes Jar for substituído.

O projeto do Setuptools trouxe para o setup do Distutils alguns novos recursos. Citemos as principais:

  • Citar as dependências da distribuição;
  • Automatizar a busca dos pacotes presentes na distribuição;
  • Declarar objetos e serviços públicos contidos na distribuição;
  • Registrar a distribuição no Cheese Shop.

Assunto da próxima parte:

  • Detalhamento dos novos recursos
  • Plugins com Eggs!
  • Exemplo: LyricSearch

Assunto da última parte:

  • Paste: uso avançado do setuptools

2 comentários em “Plugins com Eggs – Parte I

Deixe um comentário