Pacotes Python

Resumo : neste tutorial você aprende sobre os pacotes Python e como usá-los para estruturar sua aplicação.

Introdução aos pacotes Python

Suponha que você precise desenvolver um aplicativo grande que lide com o processo de vendas, do pedido ao pagamento.

O aplicativo terá vários módulos . Quando o número de módulos crescer, será difícil mantê-los todos em um único local.

E você pode querer agrupar módulos em algo significativo.

É aqui que os pacotes entram em jogo.

Os pacotes permitem organizar módulos na estrutura hierárquica.

A forma como o Python organiza pacotes e módulos como o sistema operacional estrutura as pastas e arquivos.

Para criar um pacote, você cria uma nova pasta e coloca os módulos relevantes nessa pasta.

Para instruir o Python a tratar uma pasta contendo arquivos como um pacote, você precisa criar um __init__.pyarquivo na pasta.

Observe que a partir do Python 3.3, o Python introduziu o recurso implícito de pacotes de namespace. Isso permite que o Python trate uma pasta como um pacote sem a extensão __init__.py.

Por exemplo, a imagem a seguir mostra o salespacote que contém três módulos, incluindo order, deliverye billing:

Importando pacotes

Para importar um pacote, você usa a importseguinte instrução:

import package.moduleLinguagem de código:  Python  ( python )

E para acessar um objeto de um módulo que pertence a um pacote, você usa a notação de ponto:

package.module.functionLinguagem de código:  Python  ( python )

O seguinte mostra como usar funções nos módulos order, deliverye billingdo salespacote:

# main.py
import sales.order
import sales.delivery
import sales.billing


sales.order.create_sales_order()
sales.delivery.create_delivery()
sales.billing.create_billing()Linguagem de código:  Python  ( python )

Para tornar o código mais conciso, você pode usar a seguinte instrução para importar uma função de um módulo:

from <module> import <function>Linguagem de código:  Python  ( python )

Por exemplo:

# main.py
from sales.order import create_sales_order
from sales.delivery import create_delivery
from sales.billing import create_billing


create_sales_order()
create_delivery()
create_billing()Linguagem de código:  Python  ( python )

É possível renomear o objeto ao importá-lo:

# main.py
from sales.order import create_sales_order as create_order
from sales.delivery import create_delivery as start_delivery
from sales.billing import create_billing as issue_billing


create_order()
start_delivery()
issue_billing()Linguagem de código:  Python  ( python )

Neste exemplo, renomeamos…

  • O create_sales_orderpara create_order,
  • O create_deliverypara start_delivery,
  • e o create_billingpara issue_billing.

Inicializando um pacote

Por convenção, quando você importa um pacote, o Python executará o arquivo __init__.pynesse pacote.

Portanto, você pode colocar o código no __init__.pyarquivo para inicializar os dados no nível do pacote.

O exemplo a seguir define uma taxa de imposto padrão no __init__.pypacote de vendas:

# __init__.py

# default sales tax rate
TAX_RATE = 0.07Linguagem de código:  Python  ( python )

No main.pyarquivo, você pode acessar o TAX_RATEpacote salesassim:

# main.py
from sales import TAX_RATE

print(TAX_RATE)Linguagem de código:  Python  ( python )

Além de inicializar dados em nível de pacote, __init__.pytambém permite importar módulos automaticamente do pacote.

Por exemplo, no __init__.py, se você colocar a seguinte instrução:

# __init__.py

# import the order module automatically
from sales.order import create_sales_order

# default sales tax rate
TAX_RATE = 0.07
Linguagem de código:  Python  ( python )

E importe o salespacote do arquivo main.py, a create_sales_orderfunção estará automaticamente disponível da seguinte forma:

# main.py
import sales

sales.order.create_sales_order()
Linguagem de código:  Python  ( python )

de <pacote> importação *

Ao usar a instrução para importar todos os objetos de um pacote:

from <package> import *
Linguagem de código:  Python  ( python )

Python irá procurar o __init__.pyarquivo.

Se o __init__.pyarquivo existir, ele carregará todos os módulos especificados em uma lista especial chamada __all__no arquivo.

Por exemplo, você pode colocar os módulos de pedido e entrega na __all__lista assim:

# __init__.py

__all__ = [
    'order',
    'delivery'
]
Linguagem de código:  Python  ( python )

E use a seguinte instrução de importação no main.py:

# main.py
from sales import *


order.create_sales_order()
delivery.create_delivery()

# cannot access the billing module
Linguagem de código:  Python  ( python )

No main.py, você pode acessar funções definidas nos módulos ordere delivery. Mas você não pode ver o billingmódulo porque ele não está na __all__lista.

Subpacotes

Os pacotes podem conter subpacotes. Os subpacotes permitem organizar ainda mais os módulos.

A seguir mostra o salespacote que contém três subpacotes: order, deliverye billing. Cada subpacote possui o módulo correspondente.

Por exemplo, você pode colocar todos os outros módulos relacionados ao processamento de pedidos no ordersubpacote:

Tudo o que você aprendeu sobre pacotes também é relevante para subpacotes.

Por exemplo, para importar uma função do ordersubpacote, use a seguinte importinstrução:

# main.py
from sales.order import create_sales_order

create_sales_order()Linguagem de código:  Python  ( python )

Resumo

  • Um pacote Python contém um ou mais módulos. Python usa a estrutura de pastas e arquivos para gerenciar pacotes e módulos.
  • Use o __init__.pyarquivo se desejar inicializar os dados em nível de pacote.
  • Use __all__variável para especificar os módulos que serão carregados automaticamente ao importar o pacote.
  • Um pacote pode conter subpacotes.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *