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.moduloInstrução: from
from diretorio1.diretorio2.modulo import atributoA 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.
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.employeeInstruçã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.
- Visão Geral de Módulos em Python - Funcionamento básico e pesquisa de um módulo
- Importação de Módulos em Python - Instrução sobre a importação de módulos, import e from
- Utilizando DLL's no Python com o ctype - Trabalhando com DLL's no Python.
- Fábrica de Software - Características de uma fábrica de software.
2 comentários:
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.
[]!
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.
Postar um comentário