Se os módulos são arquivos .py
individuais que agrupam funcionalidades, os pacotes em Python são uma forma de organizar coleções de módulos relacionados em uma estrutura de diretórios hierárquica. Pense neles como "pastas" que contêm vários arquivos de módulo (e até mesmo outras subpastas, que seriam subpacotes), facilitando a organização de projetos maiores e mais complexos.
Por que usar Pacotes?
autenticacao
, pagamentos
, relatorios
, etc.aplicacao.usuarios.models
e aplicacao.produtos.models
).pip
(que você provavelmente já usou ou usará) trabalham com a ideia de pacotes para instalar e gerenciar bibliotecas externas.Como um Diretório se Torna um Pacote?
Tradicionalmente, para que o Python trate um diretório como um pacote, ele precisa conter um arquivo especial chamado __init__.py
.
__init__.py
:
__init__.py
também podem ser importados como pacotes (conhecidos como "pacotes de namespace implícitos" ou "implicit namespace packages"), mas o uso explícito de __init__.py
ainda é uma prática comum e recomendada para clareza e compatibilidade.Estrutura Típica de um Projeto com Pacotes:
Imagine um projeto chamado meu_projeto
com a seguinte estrutura de diretórios:
meu_projeto/
├── main.py
├── __init__.py # Torna 'meu_projeto' um pacote (opcional a partir de Python 3.3, mas boa prática)
├── usuarios/ # Pacote 'usuarios'
│ ├── __init__.py # Torna 'usuarios' um pacote
│ ├── models.py # Módulo para modelos de usuários
│ ├── views.py # Módulo para lógica de visualização de usuários
│ └── utils.py # Módulo para funções utilitárias de usuários
├── produtos/ # Pacote 'produtos'
│ ├── __init__.py # Torna 'produtos' um pacote
│ ├── models.py # Módulo para modelos de produtos
│ ├── views.py # Módulo para lógica de visualização de produtos
│ └── api.py # Módulo para a API de produtos
└── config.py # Módulo para configurações globais
Nesta estrutura:
meu_projeto
é o diretório raiz do projeto.usuarios
e produtos
são pacotes, cada um contendo módulos (models.py
, views.py
, etc.).config.py
é um módulo no nível superior do projeto.