A build automation tool for Python projects that uses dependency-based tasks and a plugin system to define build life cycles.
pydoit/doit
A Python task runner and build tool that defines tasks as plain Python functions and skips work that is already up-to-date.
- Stars
- 2,099
- Forks
- 204
- Open issues
- 112
- Last commit
- 16 hours ago
What is it?
doit is a task management and automation tool similar to make, but tasks are written as ordinary Python functions and dictionaries instead of a dedicated DSL or YAML. Tasks are declared in a dodo.py file, and doit runs them in dependency order.
It tracks file dependencies and targets, caches results, and skips any task whose inputs have not changed since the last run. Tasks can generate subtasks from a single function, compute dependencies dynamically with calc_dep, and run concurrently using multiprocessing or threading.
The tool is extensible through a plugin architecture covering commands, reporters, backends and task loaders, so the Python code in tasks can use any library.
Key features
- 01Incremental builds that re-run only tasks whose dependencies changed
- 02Tasks defined as plain Python functions and dictionaries
- 03Dependency-ordered execution of a task graph
- 04Parallel execution via multiprocessing or threading
- 05Subtask generation and dynamic dependencies with calc_dep
- 06Plugin system for commands, reporters, backends and loaders
Use cases
- Automating build steps for projects that need file-based incremental rebuilds
- Orchestrating data processing pipelines written in Python
- Replacing ad-hoc shell scripts with versioned, dependency-aware Python tasks
Quick start
- 1
Install doit from PyPI
pip install doit - 2
Create a dodo.py file with task functions (see the Quick Example in the README)
- 3
Run doit in the directory containing dodo.py
doit
In collections
Topics
FAQ
- What is doit?
- A Python task runner and build tool that defines tasks as plain Python functions and skips work that is already up-to-date. doit is a task management and automation tool similar to make, but tasks are written as ordinary Python functions and dictionaries instead of a dedicated DSL or YAML. Tasks are declared in a dodo.py file, and doit runs them in dependency order.
- Is doit free to use? What license does it have?
- doit is open source under the MIT license. Check the license terms before using it in commercial products.
- Is doit still maintained?
- Actively maintained. The last commit to doit was on Nov 7, 2026.
- What can I use doit for?
- Automating build steps for projects that need file-based incremental rebuilds Orchestrating data processing pipelines written in Python Replacing ad-hoc shell scripts with versioned, dependency-aware Python tasks
- How do I install doit?
- Install doit from PyPI: pip install doit Create a dodo.py file with task functions (see the Quick Example in the README) Run doit in the directory containing dodo.py: doit
- Where can I get doit?
- The source code and installation instructions are on GitHub: https://github.com/pydoit/doit
Summary generated by AI from the project's README. GitHub stats refresh daily.
Related projects
SCons is a Python-based software construction tool that determines what needs rebuilding and runs the commands to build it.
A fast, cross-platform task runner written in Go, inspired by Make and configured through a Taskfile YAML file.
Python-based tool for repeatable assembly and deployment of applications built from Python distributions and other systems.
A monorepo build platform for TypeScript and polyglot codebases that caches unchanged work, runs only affected tasks, and integrates with CI.
A command-line tool that creates isolated, reproducible development shells with project-specific packages from the Nix registry, without containers.