pyinfra automates infrastructure super fast at massive scale. It can be used for ad-hoc command execution, service deployment, configuration management and more. Core design features include:

  • 🚀 Super fast execution over thousands of targets with predictable performance.
  • 🚨 Instant debugging with stdout & stderr output on error or as required (-v|-vv|-vvv).
  • 💻 Agentless execution by speaking native SSH/Docker/subprocess.
  • ❗️ Two stage process that enables --dry runs before making any changes.
  • 📦 Extendable with any Python package as configured & written in standard Python.
  • 🔌 Integrated with Docker, Vagrant & Ansible out of the box.

When you run pyinfra you'll see something like (non animated version):


Install pyinfra with pipx (recommended) or pip:

pipx install pyinfra

Now you can execute commands over SSH:

pyinfra exec -- echo "hello world"

Or target Docker, the local machine, and other connectors:

pyinfra @docker/ubuntu exec -- echo "Hello world"
pyinfra @local exec -- echo "Hello world"

As well as executing commands you can define state using operations:

pyinfra @docker/ubuntu apt.packages iftop update=true _sudo=true

Which can then be saved as a Python file like

from pyinfra.operations import apt

    name="Ensure iftop is installed",

And executed:

pyinfra @docker/ubuntu

Now you know pyinfra!

There's ways to store inventory & data in files, a bunch of operations and facts, plus some documented examples to help. See the more detailed getting started page or using operations guide.