Pythonic task management & command execution.
Python Other
Permalink
Failed to load latest commit information.
appveyor Add support for CI with Appveyor Mar 5, 2015
completion Get basic --collection matching working for zsh completion Apr 29, 2015
integration Switch to Python 2.7-style string interpolation, i.e. {} instead of {0} Oct 10, 2017
invoke Implement flag-got-value parser tracking. Oct 18, 2017
sites Changelog update for previous bugfix Oct 18, 2017
tests Welp this earlier test explains why shit was broke ugh Oct 18, 2017
.coveragerc Update coverage stuff to use .coveragerc, and add codecov. Dec 22, 2015
.gitignore Some tools generate coverage.xml now whee Dec 22, 2015
.travis.yml Remove explicit references to Python 2.6 or 3.3 Oct 10, 2017
LICENSE Happy New Year Jan 1, 2017
MANIFEST.in Tidy up MANIFEST.in so source distro includes tasks.py, etc. Feb 8, 2016
README.rst Switch to Python 2.7-style string interpolation, i.e. {} instead of {0} Oct 10, 2017
THOUGHTS.rst Make shit moved to THOUGHTS re: parameterization actually make sense … Jun 15, 2015
appveyor.yml Add support for CI with Appveyor Mar 5, 2015
codecov.yml No codecov comments plz May 24, 2017
dev-requirements.txt No longer limited to 2.6-compat Sphinxes, let's see if 1.6.x fixes th… Oct 18, 2017
setup.cfg Include LICENSE in wheels Oct 18, 2017
setup.py Switch to Python 2.7-style string interpolation, i.e. {} instead of {0} Oct 10, 2017
tasks-requirements.txt Must use modern twine for modern pypi \o/ Jul 28, 2017
tasks.py Check setup.py desc when packaging Apr 19, 2017
tox.ini Start setting up tox Mar 16, 2013

README.rst

Invoke is a Python (2.7 and 3.4+) task execution tool & library, drawing inspiration from various sources to arrive at a powerful & clean feature set.

  • Like Ruby's Rake tool and Invoke's own predecessor Fabric 1.x, it provides a clean, high level API for running shell commands and defining/organizing task functions from a tasks.py file:

    from invoke import task
    
    @task
    def clean(ctx, docs=False, bytecode=False, extra=''):
        patterns = ['build']
        if docs:
            patterns.append('docs/_build')
        if bytecode:
            patterns.append('**/*.pyc')
        if extra:
            patterns.append(extra)
        for pattern in patterns:
            ctx.run("rm -rf {}".format(pattern))
    
    @task
    def build(ctx, docs=False):
        ctx.run("python setup.py build")
        if docs:
            ctx.run("sphinx-build docs docs/_build")
  • From GNU Make, it inherits an emphasis on minimal boilerplate for common patterns and the ability to run multiple tasks in a single invocation:

    $ invoke clean build
    
  • Where Fabric 1.x considered the command-line approach the default mode of use, Invoke (and tools built on it) are equally at home embedded in your own Python code or a REPL:

    .. testsetup:: blurb
    
        fakeout = """
        Hello, this is pip
        Installing is fun
        Fake output is fake
        Successfully installed invocations-0.13.0 pep8-1.5.7 spec-1.3.1
        """
        proc = MockSubprocess(out=fakeout, exit=0)
    
    
    .. testcleanup:: blurb
    
        proc.stop()
    
    
    >>> from invoke import run
    >>> cmd = "pip install -r requirements.txt"
    >>> result = run(cmd, hide=True, warn=True)
    >>> print(result.ok)
    True
    >>> print(result.stdout.splitlines()[-1])
    Successfully installed invocations-0.13.0 pep8-1.5.7 spec-1.3.1
  • Following the lead of most Unix CLI applications, it offers a traditional flag-based style of command-line parsing, deriving flag names and value types from task signatures (optionally, of course!):

    $ invoke clean --docs --bytecode build --docs --extra='**/*.pyo'
    $ invoke clean -d -b build --docs -e '**/*.pyo'
    $ invoke clean -db build -de '**/*.pyo'
    
  • Like many of its predecessors, it offers advanced features as well -- namespacing, task aliasing, before/after hooks, parallel execution and more.

For documentation, including detailed installation information, please see http://pyinvoke.org. Post-install usage information may be found in invoke --help.

You can install the development version via pip install -e git+https://github.com/pyinvoke/invoke#egg=invoke.