Organização e Distribuição de Módulos em Python

1. Instalação de pacotes

Para adicionar bibliotecas ao ambiente Python, utilize o gerenciador de pacotes pip. A versão do comando depende da instalação do interpretador:

pip install pygame    # Python 2
pip3 install pygame   # Python 3

2. Criação de módulos personalizados

Quando um arquivo .py é importado, o interpretador gera um arquivo sendmsg.cpython-36.pyc, que contém o bytecode. Esse arquivo intermediário acelera execuções futuras, pois evita a recompilação do código-fonte.

3. Formas de importar

Existem várias maneiras de trazer funcionalidades de um módulo para o escopo atual:

import utilidades
from utilidades import carregar, salvar
from utilidades import *

Importações com * podem causar colisões de nomes; em caso de repeticao, a última definição sobrescreve as anteriores. Para simplificar nomes longos, use um apelido:

import datetime as dt

A ordem de busca do interpretador é:

  1. Diretório atual
  2. Caminhos configurados no sistema

Ao importar um módulo, seu corpo é executado automaticamente. Por isso, costuma-se declarar apenas funções e classes. O atributo especial __name__ permite diferenciar execução direta de importação: quando o arquivo é executado, vale '__main__'; quando importado, vale o nome do próprio módulo.

class Pessoa:
    def __init__(self, nome, idade):
        self.nome = nome
        self.idade = idade

    def __str__(self):
        return f"[nome={self.nome}, idade={self.idade}]"


def principal():
    print("Iniciando teste...")
    individuo = Pessoa("Ana", 25)
    print(individuo)


if __name__ == '__main__':
    principal()

Controle de exportação com __all__

A lista __all__ define quais elementos serão disponibilizados quando se usa from modulo import *. Apenas os nomes listados ficam visíveis; funções, classes e variáveis fora dela permaencem inacessíveis por esse tipo de importação.

__all__ = ["calcular", "validar"]

4. Pacotes e __init__.py

Um pacote é representado por uma pasta que contém um arquivo chamado __init__.py. A importação do pacote como um todo dispara a execução desse arquivo.

Dentro de __init__.py, é comum importar os submódulos desejados. A forma mais segura e compatível entre Python 2 e Python 3 é:

from . import pessoa

Recomenda-se, portanto, usar sempre a sintaxe from pacote import modulo, tanto externamente quanto dentro do próprio __init__.py.

5. Empacotamento e publicação

Para distribuir um projeto, crie um arquivo setup.py usando distutils:

from distutils.core import setup

setup(
    name='meu_projeto',
    version='1.0',
    description='Conjunto de módulos utilitários',
    author='Autor Exemplo',
    py_modules=['mod_a.funcoes', 'mod_b.classes']
)

Em seguida, execute os comandos no terminal:

python3 setup.py build
python3 setup.py sdist

O segundo comando gera um pacote de distribuição, que inclui um arquivo PKG-INFO com os metadados do projeto. Para instalar localemnte:

python setup.py install

6. Recebendo argumentos da linha de comando

O módulo sys oferece acesso aos parâmetros passados ao iniciar o programa:

import sys

print(sys.argv)

O valor sys.argv[0] é o nome do script, enquanto os demais itens são os argumentos fornecidos pelo usuário.

Tags: Python modulos Pacotes pip setup.py

Publicado em 6-26 19:21