Define tasks in Python. Run only what changed.
doit is a task management & automation tool like make, but in pure Python. It tracks file dependencies, caches results, and skips tasks that are already up-to-date. No DSL, no YAML - just Python functions.
Quick Example
Create a dodo.py:
def task_hello():
"""create a greeting file"""
return {
'actions': ['echo "Hello from doit" > hello.txt'],
'targets': ['hello.txt'],
'clean': True,
}
def task_shout():
"""convert greeting to uppercase"""
return {
'actions': ['tr a-z A-Z < hello.txt > shout.txt'],
'file_dep': ['hello.txt'],
'targets': ['shout.txt'],
'clean': True,
}
Run it:
$ pip install doit
$ doit
. hello
. shout
$ doit # nothing to do - already up-to-date
-- hello
-- shout
Key Features
Incremental builds - tracks file dependencies and targets, re-runs only what changed
DAG execution - tasks run in correct dependency order
Python-native - tasks are plain Python dicts and functions, use any library
Parallel execution - run independent tasks concurrently (multiprocessing or threading)
Subtask generation - yield multiple tasks from a single function
Computed dependencies - calc_dep for dynamic dependency graphs
Plugin architecture - extensible commands, reporters, backends, and task loaders
Project Details
Website & docs - https://pydoit.org
Project management on github - https://github.com/pydoit/doit
Discussion group - https://groups.google.com/forum/#!forum/python-doit
X/twitter - https://x.com/pydoit
license
The MIT License Copyright (c) 2008-2026 Eduardo Naufel Schettino
Release files for doit 0.37.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| doit-0.37.0.tar.gz | 1.5 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| doit-0.37.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.5 MB
Release files / doit-0.37.0.tar.gz
| Download URL | doit-0.37.0.tar.gz |
|---|---|
| Size | 1.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d3c72e0e46a8fa1ddabea8f830762402dee090caf33c30c2295ac7010db8f09c
|
|
BLAKE2b-256 checksum How to use checksums |
35f63a817d438799bda4d4e5fd136175cf7c328c074fadc1422dec3b374907e7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / doit-0.37.0-py3-none-any.whl
| Download URL | doit-0.37.0-py3-none-any.whl |
|---|---|
| Size | 85.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a9f181566aa90faac515e276f85e6526019554ed7e13c12cf9dc094ffecf3e1b
|
|
BLAKE2b-256 checksum How to use checksums |
9c383d6dcbf8379cb86d71a2325210ca3469a33767d8254b74d8c343db26ce87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|