Introdução
A automatização de tarefas rotineiras é uma parte essencial do desenvolvimento de software moderno. Seja para compilar um projeto, fazer deploy, formatar código, executar migrações ou rodar testes — todos esses processos são melhor gerenciados por ferramentas especializadas. Para desenvolvedores Python, a biblioteca Invoke surge como uma solução versátil e poderosa.
Invoke é uma biblioteca Python robusta para criar utilitários de linha de comando, permitindo descrever tarefas como funções Python comuns. Ela oferece uma maneira simples, porém funcional, de organizar comandos automatizados, lembrando ferramentas populares como make ou Fabric, mas escrita inteiramente em Python puro.
O que é Invoke
Invoke é uma biblioteca Python para descrever e executar tarefas no estilo de linha de comando, projetada para simplificar a automatização de processos de desenvolvimento. Ela foi extraída do Fabric 2 como um componente independente para construir interfaces CLI e automatizar tarefas.
Principais Vantagens do Invoke
A biblioteca oferece aos desenvolvedores os seguintes recursos:
- Descrição declarativa de tarefas — as tarefas são descritas como funções Python comuns com o decorador
@task - Criação automática de CLI — a interface de linha de comando é gerada automaticamente a partir do código
- Suporte rico a argumentos — suporte nativo para argumentos, opções e documentação de ajuda
- Integração com shell — trabalho facilitado com comandos shell através do objeto Context
- Configuração flexível — suporte a namespaces, arquivos de configuração e variáveis de ambiente
- Extensibilidade — possibilidade de criar pipelines complexos e cadeias de tarefas
Instalação e Configuração Inicial
Instalação da Biblioteca
Para instalar o Invoke, use o pip:
pip install invoke
Após a instalação, o comando inv fica disponível, funcionando como um equivalente ao make, mas operando com código Python.
Verificando a Instalação
Confirme se a instalação foi bem-sucedida com o comando:
inv --version
Estrutura de Tarefas e Sintaxe Básica
Criando sua Primeira Tarefa
Um exemplo simples de tarefa é o seguinte:
from invoke import task
@task
def hello(c):
print("Olá, mundo!")
Para executar a tarefa, use o comando:
inv hello
Objeto Context
Cada tarefa recebe um objeto Context (geralmente representado como c), através do qual é possível executar comandos shell, gerenciar configurações e acessar diversas utilidades:
@task
def build(c):
c.run("python setup.py sdist")
c.run("python setup.py bdist_wheel")
Decorador @task
O decorador @task é usado para marcar uma função como uma tarefa CLI. Ele suporta vários parâmetros para personalizar o comportamento:
@task(help={"name": "Nome do usuário para a saudação"})
def greet(c, name="Anônimo"):
print(f"Olá, {name}!")
Executando com parâmetros:
inv greet --name=João
Trabalhando com Argumentos e Opções
Argumentos Obrigatórios
Para criar argumentos obrigatórios, use parâmetros de função sem valores padrão:
@task
def say(c, word):
print(f"Foi dito: {word}")
inv say --word="Olá, mundo!"
Argumentos Opcionais
Argumentos opcionais são criados com valores padrão:
@task
def greet(c, name="Visitante"):
print(f"Bem-vindo, {name}!")
inv greet
inv greet --name="Maria"