Skip to content

Invoke

Invoke is a Python task runner that aims to provide a simple and intuitive way to define and execute tasks in your projects. It is particularly useful for automating repetitive tasks, such as building, testing, and deploying code. Invoke is inspired by Ruby’s Rake and is part of the Fabric ecosystem, which is a collection of libraries for streamlining the use of SSH for application deployment or systems administration tasks.

Some advantages of using Invoke as a task runner are:

  1. Simplicity: Invoke’s syntax is easy to understand, and defining tasks is as simple as writing Python functions.
  2. Flexibility: Invoke allows you to leverage the full power of Python when creating your tasks and workflows.
  3. Namespacing: Invoke supports namespacing for tasks, which helps organize tasks into logical groups.
  4. Command-line interface: Invoke comes with a command-line tool that allows you to run tasks, list available tasks, and access task-related help.
  5. Cross-platform: Invoke is written in Python and can run on any platform where Python is supported.

History

Invoke is a Python task execution library and command-line tool that is part of the Fabric ecosystem. Fabric is a library that simplifies the use of SSH for application deployment and systems administration tasks. The history of Invoke is closely tied to the history of Fabric.

Fabric was initially created by Jeff Forcier in 2008 as a tool for streamlining SSH-based application deployment. The first version of Fabric, Fabric 1.0, was released in 2010. As the project evolved and gained traction, the need for a more general-purpose task execution tool became apparent.

Fabric’s original author, Jeff Forcier, started working on a separate task execution library that would eventually become Invoke. The goal was to create a tool that could be used independently of Fabric and provide a simple and intuitive way to define and execute tasks in Python. Invoke was inspired by Ruby’s Rake and shares some similarities in terms of syntax and functionality.

Invoke was officially released as a standalone library in 2013. Since then, it has been actively developed and maintained, with several releases and improvements being made over time. Invoke is now part of the Fabric ecosystem, which also includes the Paramiko library (an implementation of the SSHv2 protocol) and the Fabric library itself.

Usage

To use Invoke, you’ll need to install it, create a configuration file, and define tasks. Here’s a step-by-step guide on how to use Invoke:

Install Invoke:

You can install Invoke using pip, Python’s package manager. Open a terminal or command prompt and run:

pip install invoke

Create a tasks.py file:

Invoke looks for a configuration file named tasks.py in your project directory. This file contains the tasks and their dependencies. Create a new file named tasks.py in your project’s root folder.

Define tasks:

Tasks are defined as Python functions in the tasks.py file. You need to import the task decorator from the invoke module and use it to decorate your task functions. Here’s an example of a simple tasks.py file with two tasks:

from invoke import task

@task
def hello(c):
    c.run('echo "Hello, World!"')

@task
def goodbye(c):
    c.run('echo "Goodbye, World!"')

In this example, we’ve defined two tasks: hello and goodbye. Each task has a single action, which is a shell command that prints a message. The c parameter is an instance of the invoke.Context class, which provides access to methods for running shell commands and managing the task’s context.

Run tasks:

To run tasks, use the inv or invoke command followed by the task name. For example, to run the hello task, open a terminal or command prompt in your project directory and run:

inv hello

or

invoke hello

To run the goodbye task, run:

inv goodbye

or

invoke goodbye

Manage dependencies between tasks:

You can define dependencies between tasks by using the pre and post parameters in the @task decorator. For example, let’s add a new task named greet that depends on the hello and goodbye tasks:

from invoke import task

@task
def hello(c):
    c.run('echo "Hello, World!"')

@task
def goodbye(c):
    c.run('echo "Goodbye, World!"')

@task(pre=[hello], post=[goodbye])
def greet(c):
    c.run('echo "Greet the world!"')

Now, when you run the greet task, Invoke will automatically run the hello task before greet, and the goodbye task after greet:

inv greet

These are the basic steps to use Invoke as a task runner. You can find more advanced features and examples in the official documentation.

Page last modified: 2023-04-26 09:44:25