Pacotes de Módulos em Python

Pode-se entender como pacote de módulo um diretório onde contenha os arquivos de módulos necessários para utilização de um sistema em Python. Um pacote de módulo tem como principal característica a organização do código em um sistema.

Para importação de pacotes utiliza-se o caminho dos arquivos separados por "pontos" e por fim o arquivo a ser importado. O diretório contêiner é omitido e deve ser obtido pela localização dos arquivos de módulo como apresentado anteriormente.

Tem-se a seguinte hierarquia:

Instrução: import


import diretorio1.diretorio2.modulo
Instrução: from
from diretorio1.diretorio2.modulo 
import atributo
A grande sacada da utilização dos pontos da notação é a portabilidade entre plataformas de desenvolvimento. Como o diretório contêiner é omitido e este é encontrado pelo caminho de pesquisa em Python, arquivos .pth e PYTHONPATH, o interpretador realiza a busca e concatena os diretórios importados em seu caminho de pesquisa.

Um detalhe importante na utilização de pacotes consiste em ter um arquivo __init__.py em todos os diretórios informados nas instruções de importação. Vale ressaltar que não é preciso existir esse arquivo no caminho que é buscado pelo PYTHONPATH ou .pth, o interpretador desconsidera o arquivo para estes diretórios.

Os arquivos __init__.py contém códigos Python, assim como os demais arquivos de módulo. Não é necessário que exista alguma instrução nestes arquivos, os mesmos podem estar vazios. Sempre ao passar pela primeira vez por um diretório de uma importação de pacote todo o conteúdo presente nos arquivos são executados. Uma forma útil de utilização destes arquivos poderia ser para abrir conexão com banco de dados, por exemplo.

Abaixo será apresentado graficamente este esquema.


Figura 1. Hierarquia de pacote

Observe que para todos os diretórios presentes na importação, exceto o contêiner, tem um arquivo __init__.py e no diretório 2 está o arquivo que realmente será importado. Neste exemplo a importação seria da seguinte forma:

Instrução: import

import diretorio1.diretorio2.employee
Instrução: from
from diretorio.diretorio2.employee 
import salary_inc
Nota: o módulo employee.py é o mesmo utilizado na postagem anterior.
Sem a presença dos arquivos __init__.py suas importações falharão e existem com a finalidade de impedir que diretórios sejam ocultos pela pesquisa impossibilitando a busca correta do arquivo desejado.

Alguns detalhes avançados, assim como da postagem Importação de Módulos em Python, serão discutidos na próxima postagem.

José Mauro da Silva Sandy


Referências

  • MARK, Lutz. ASCHER, David. Aprendendo Python. Tradução João Tortello. 2. ed. Porto Alegre : Bookman, 2007.
Série Módulos em Python
Leia Também


2 comentários:

  Lopes

28 de dezembro de 2008 às 15:49

Salve!

Bom texto, cara! Só acho que faltou mostrar como usar a importação no código, o que mostraria o problema do uso de nomes grandes, como dir1.dir2.dir3.func1(). Isso o levaria a mostrar a cláusula as. Talvez você aborde isso em postagens no futuro, mas eu creio que seria propício neste texto, já que não seria tanta coisa.

[]!

  José Mauro

28 de dezembro de 2008 às 16:04

Brother,

Esse é o mesmo caso de __all__, esses detalhes mais avançados e pequenos vou fazer na postagem final. Aguarde....

Abraço.