Packages – Python – Linux

Publicado: 23 de fevereiro de 2014 em Python

Uma Package (pacote) é uma coleção de módulos relacionados armazenados em um diretório e subdiretórios.

Um __name__ é um __name__, exceto quando é __ main__

Dentro de um módulo, o nome do módulo (como uma string) é armazenado no nome global __ name__.

Mas há uma exceção: Se o arquivo de módulo é executado como um programa a partir da  linha de comando, Python define __ name__ do módulo para ‘__main__‘.

Este recurso é útil para incluir código (geralmente o código de teste) em um arquivo de módulo que é executado somente quando você iniciar o módulo a partir da linha de comando (digitando: python nomedomodulo.py).

O código fica assim:


if __name__ == '__main__':

do something

Quando você inclui o código que é executado somente sob essas circunstâncias, você não tem que remover o código quando você importa o módulo. Isso porque quando um módulo é importado, __ name__ é o nome do módulo, não ‘__main__‘.

Este código vai fora de quaisquer definição de função ou declarações de importação no módulo, geralmente no final do módulo.

Os efeitos de pacotes

Os pacotes são uma outra maneira de tirar vantagem da capacidade do Python para ocultar a complexidade.

Pacotes tem alguns recursos úteis:

  • Um pacote tem seu próprio namespace.
  • Nomes definidos dentro de um módulo,  incluindo nomes de módulos não conflitam com os nomes definidos em outro lugar.
  • Os pacotes podem conter módulos.
  • Os pacotes podem conter sub pacotes.
  • Pacotes são ideais para armazenar e organizar uma série de características relacionadas.

Requisitos e Orientações Para os Pacotes:

  • Um pacote vive dentro de um diretório e seus sub pacotes vivem dentro de sub diretórios desse diretório (em geral).
  • Assim como um módulo de arquivos nomeia o módulo, um pacote de diretório nomeia o pacote.
  • Isso permite importar itens do pacote, usando a importação no formato packagename.modulename.
  • Um diretório do pacote deve conter um arquivo chamado __ init__.py.

No caso mais simples, __ init__.py é apenas um arquivo vazio. Mas, muitas vezes, contém código que inicializa o pacote. Por exemplo, a melhor maneira de importar um específico sub módulo com um pacote ou sub pacotes particular é carregá-los no arquivo __init__.py.

O arquivo __init__.py às vezes contém a lista: __ all__

Esta lista ajuda código Python executado em diferentes sistemas operacionais. Quando você inclui nomes de módulos em __all__, o comando de importação: from packagename import * – importa apenas estes módulos.

Sobre diretórios e pacotes especiais

Quando Python é instalado, ele cria diretórios específicos para pacotes. Se você armazenar pacotes em um desses diretórios especiais de pacote, é menos provável ter problemas se os seus nomes de pacotes são os mesmos que os nomes dos módulos em outros lugares no caminho Python.

  • Diretório: lib/local-python/  – Este diretório é para pacotes que funcionam da mesma maneira com todas as versões do Python.
  • Diretório: Lib/pythonXX/site-packages/ – Este diretório é para os pacotes que dependem da versão do Python. Alterações XX representam o número da versão do Python.

Estrutura de Packages

Você pode ver melhor como é uma estrutura de packages Python na imagem abaixo:

pacotes

 Exemplo:

Neste exemplo criamos um projeto chamado Prj_Dev01 e na raiz do projeto temos o modulo principal.py, logo temos um pacote chamado devaberto(em Python uma package é apenas um diretório que contém o arquivo __init__.py) e dentro dele temos um modulo chamado msg.py e o arquivo de controle do pacote chamado __init__.py.

Python

Principal.py

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# Principal.py

# Importa pacote
import devaberto.msg

# Importa OS
import os

# Limpa a tela
os.system("clear")

print "Modulo Principal"

print "\n"

devaberto.msg.menssagem("Minha menssagem")
devaberto.msg.msg2('menssagem2')

# Cria uma espera no terminal
raw_input()

__init__.py

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto

__all__ = ['msg']
# Importa pacote
import msg

msg.py

#!/usr/bin/env python
# -*- coding: latin-1 -*-
# Desenvolvimento Aberto
# msg.py

def menssagem (x):
     print x

def msg2(x):
     print x
     print x
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s