“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”