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__.py
arquivo 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 sales
pacote que contém três módulos, incluindo order
, delivery
e billing
:
Importando pacotes
Para importar um pacote, você usa a import
seguinte instrução:
import package.module
Linguagem 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.function
Linguagem de código: Python ( python )
O seguinte mostra como usar funções nos módulos order
, delivery
e billing
do sales
pacote:
# 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_order
paracreate_order
, - O
create_delivery
parastart_delivery
, - e o
create_billing
paraissue_billing
.
Inicializando um pacote
Por convenção, quando você importa um pacote, o Python executará o arquivo __init__.py
nesse pacote.
Portanto, você pode colocar o código no __init__.py
arquivo para inicializar os dados no nível do pacote.
O exemplo a seguir define uma taxa de imposto padrão no __init__.py
pacote de vendas:
# __init__.py
# default sales tax rate
TAX_RATE = 0.07
Linguagem de código: Python ( python )
No main.py
arquivo, você pode acessar o TAX_RATE
pacote sales
assim:
# 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__.py
també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 sales
pacote do arquivo main.py, a create_sales_order
funçã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__.py
arquivo.
Se o __init__.py
arquivo 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 order
e delivery
. Mas você não pode ver o billing
mó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 sales
pacote que contém três subpacotes: order
, delivery
e billing
. Cada subpacote possui o módulo correspondente.
Por exemplo, você pode colocar todos os outros módulos relacionados ao processamento de pedidos no order
subpacote:
Tudo o que você aprendeu sobre pacotes também é relevante para subpacotes.
Por exemplo, para importar uma função do order
subpacote, use a seguinte import
instruçã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__.py
arquivo 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.