Neste artigo, você aprenderá a dividir sua base de código em módulos limpos e eficientes usando pacotes Python. Além disso, você aprenderá a importar e usar seus próprios pacotes ou pacotes de terceiros em seu programa Python.
Vídeo: Pacotes Python: Organize Seu Código
O que são pacotes?
Normalmente não armazenamos todos os nossos arquivos em nosso computador no mesmo local. Usamos uma hierarquia de diretórios bem organizada para facilitar o acesso.
Arquivos semelhantes são mantidos no mesmo diretório, por exemplo, podemos manter todas as músicas no diretório " música ". De forma análoga a isso, Python possui pacotes para diretórios e módulos para arquivos.
À medida que nosso programa de aplicação cresce em tamanho com muitos módulos, colocamos módulos semelhantes em um pacote e módulos diferentes em pacotes diferentes. Isso torna um projeto (programa) fácil de gerenciar e conceitualmente claro.
Da mesma forma, como um diretório pode conter subdiretórios e arquivos, um pacote Python pode ter subpacotes e módulos.
Um diretório deve conter um arquivo nomeado __init__.py
para que o Python o considere como um pacote. Este arquivo pode ser deixado vazio, mas geralmente colocamos o código de inicialização para esse pacote neste arquivo.
Aqui está um exemplo. Suponha que estejamos desenvolvendo um jogo. Uma organização possível de pacotes e módulos pode ser conforme mostrado na figura abaixo.

Importando módulo de um pacote
Podemos importar módulos de pacotes usando o operador ponto (.).
Por exemplo, se quisermos importar o start
módulo do exemplo acima, isso pode ser feito da seguinte maneira:
import Game.Level.start
Agora, se este módulo contém uma função chamada select_difficulty()
, devemos usar o nome completo para referenciá-la.
Game.Level.start.select_difficulty(2)
Se esta construção parecer longa, podemos importar o módulo sem o prefixo do pacote da seguinte maneira:
from Game.Level import start
Agora podemos chamar a função simplesmente como segue:
start.select_difficulty(2)
Outra maneira de importar apenas a função necessária (ou classe ou variável) de um módulo dentro de um pacote seria a seguinte:
from Game.Level.start import select_difficulty
Agora podemos chamar diretamente esta função.
select_difficulty(2)
Embora seja mais fácil, esse método não é recomendado. Usar o namespace completo evita confusão e evita que dois nomes de identificadores iguais colidam.
Ao importar pacotes, o Python procura na lista de diretórios definidos em sys.path
, semelhante ao caminho de pesquisa do módulo.