{"id":13738332,"url":"https://github.com/pytask-dev/pytask","last_synced_at":"2025-04-09T13:04:05.264Z","repository":{"id":37004317,"uuid":"274689747","full_name":"pytask-dev/pytask","owner":"pytask-dev","description":"pytask is a workflow management system that facilitates reproducible data analyses.","archived":false,"fork":false,"pushed_at":"2024-04-13T09:34:39.000Z","size":2703,"stargazers_count":101,"open_issues_count":19,"forks_count":10,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-04-14T13:20:07.340Z","etag":null,"topics":["pytask","reproducible-research","scientific-workflows"],"latest_commit_sha":null,"homepage":"https://pytask-dev.readthedocs.io/en/stable","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pytask-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-06-24T14:27:51.000Z","updated_at":"2024-04-16T22:03:53.853Z","dependencies_parsed_at":"2023-10-16T09:00:08.802Z","dependency_job_id":"242b1be9-5618-421c-b3b9-06bd3aea1ed2","html_url":"https://github.com/pytask-dev/pytask","commit_stats":{"total_commits":453,"total_committers":9,"mean_commits":"50.333333333333336","dds":"0.23399558498896245","last_synced_commit":"2bad52ff18aab761f1afca953a9c87093e678698"},"previous_names":[],"tags_count":50,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pytask-dev%2Fpytask","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pytask-dev%2Fpytask/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pytask-dev%2Fpytask/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pytask-dev%2Fpytask/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pytask-dev","download_url":"https://codeload.github.com/pytask-dev/pytask/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248045230,"owners_count":21038553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["pytask","reproducible-research","scientific-workflows"],"created_at":"2024-08-03T03:02:18.910Z","updated_at":"2025-04-09T13:04:05.242Z","avatar_url":"https://github.com/pytask-dev.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"\u003ca href=\"https://pytask-dev.readthedocs.io/en/stable\"\u003e\n    \u003cp align=\"center\"\u003e\n        \u003cimg src=\"https://raw.githubusercontent.com/pytask-dev/pytask/main/docs/source/_static/images/pytask_w_text.png\" width=50% alt=\"pytask\"\u003e\n    \u003c/p\u003e\n\u003c/a\u003e\n\n______________________________________________________________________\n\n\u003c!-- Keep in sync with docs/source/index.md --\u003e\n\n[![PyPI](https://img.shields.io/pypi/v/pytask?color=blue)](https://pypi.org/project/pytask)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pytask)](https://pypi.org/project/pytask)\n[![image](https://img.shields.io/conda/vn/conda-forge/pytask.svg)](https://anaconda.org/conda-forge/pytask)\n[![image](https://img.shields.io/conda/pn/conda-forge/pytask.svg)](https://anaconda.org/conda-forge/pytask)\n[![PyPI - License](https://img.shields.io/pypi/l/pytask)](https://pypi.org/project/pytask)\n[![image](https://readthedocs.org/projects/pytask-dev/badge/?version=latest)](https://pytask-dev.readthedocs.io/en/stable)\n[![image](https://img.shields.io/github/actions/workflow/status/pytask-dev/pytask/main.yml?branch=main)](https://github.com/pytask-dev/pytask/actions?query=branch%3Amain)\n[![image](https://codecov.io/gh/pytask-dev/pytask/branch/main/graph/badge.svg)](https://app.codecov.io/gh/pytask-dev/pytask)\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/pytask-dev/pytask/main.svg)](https://results.pre-commit.ci/latest/github/pytask-dev/pytask/main)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n\n\u003c!-- Keep in sync with docs/source/index.md --\u003e\n\npytask is a workflow management system that facilitates reproducible data analyses. Its\nfeatures include:\n\n- **Automatic discovery of tasks.**\n- **Lazy evaluation.** If a task, its dependencies, and its products have not changed,\n  do not execute it.\n- **Debug mode.**\n  [Jump into the debugger](https://pytask-dev.readthedocs.io/en/stable/tutorials/debugging.html)\n  if a task fails, get feedback quickly, and be more productive.\n- **Repeat a task with different inputs.**\n  [Loop over task functions](https://pytask-dev.readthedocs.io/en/stable/tutorials/repeating_tasks_with_different_inputs.html)\n  to run the same task with different inputs.\n- **Select tasks via expressions.** Run only a subset of tasks with\n  [expressions and marker expressions](https://pytask-dev.readthedocs.io/en/stable/tutorials/selecting_tasks.html).\n- **Easily extensible with plugins**. pytask is built on\n  [pluggy](https://pluggy.readthedocs.io/en/latest/), a plugin management framework that\n  allows you to adjust pytask to your needs. Plugins are available for\n  [parallelization](https://github.com/pytask-dev/pytask-parallel),\n  [LaTeX](https://github.com/pytask-dev/pytask-latex),\n  [R](https://github.com/pytask-dev/pytask-r), and\n  [Stata](https://github.com/pytask-dev/pytask-stata) and more can be found\n  [here](https://github.com/topics/pytask). Learn more about plugins in\n  [this tutorial](https://pytask-dev.readthedocs.io/en/stable/tutorials/plugins.html).\n\n# Installation\n\n\u003c!-- Keep in sync with docs/source/tutorials/installation.md --\u003e\n\npytask is available on [PyPI](https://pypi.org/project/pytask) and on\n[Anaconda.org](https://anaconda.org/conda-forge/pytask). Install the package with\n\n```console\n$ pip install pytask\n```\n\nor\n\n```console\n$ conda install -c conda-forge pytask\n```\n\nColor support is automatically available on non-Windows platforms. On Windows, please,\nuse [Windows Terminal](https://github.com/microsoft/terminal), which can be, for\nexample, installed via the [Microsoft Store](https://aka.ms/terminal).\n\nTo quickly set up a new project, use the\n[cookiecutter-pytask-project](https://github.com/pytask-dev/cookiecutter-pytask-project)\ntemplate or start from\n[other templates or example projects](https://pytask-dev.readthedocs.io/en/stable/how_to_guides/bp_templates_and_projects.html).\n\n# Usage\n\nA task is a function that is detected if the module and the function name are prefixed\nwith `task_`. Here is an example.\n\n```python\n# Content of task_hello.py.\n\nfrom pathlib import Path\n\nfrom pytask import Product\nfrom typing import Annotated\n\n\ndef task_hello_earth(path: Annotated[Path, Product] = Path(\"hello_earth.txt\")):\n    path.write_text(\"Hello, earth!\")\n```\n\n- The purpose of the task is to create the file `hello_earth.txt` and add some content.\n\n- To tell pytask that `hello_earth.txt` is a product and not an input, use the `Product`\n  annotation.\n\n  (If you are not used to type annotations, do not worry. pytask also offers simpler\n  interfaces without type annotations.)\n\n- Since you pass a `pathlib.Path` to the function, pytask will check whether the file\n  exists after the function is executed.\n\nTo execute the task, enter `pytask` on the command-line\n\n![image](https://github.com/pytask-dev/pytask/raw/main/docs/source/_static/images/readme.gif)\n\n# Documentation\n\nYou find the documentation \u003chttps://pytask-dev.readthedocs.io/en/stable\u003e with\n[tutorials](https://pytask-dev.readthedocs.io/en/stable/tutorials/index.html) and guides\nfor\n[best practices](https://pytask-dev.readthedocs.io/en/stable/how_to_guides/index.html).\n\n# Changes\n\nConsult the [release notes](https://pytask-dev.readthedocs.io/en/stable/changes.html) to\nfind out about what is new.\n\n# License\n\npytask is distributed under the terms of the [MIT license](LICENSE).\n\n# Acknowledgment\n\nThe license also includes a copyright and permission notice from\n[pytest](https://github.com/pytest-dev/pytest) since some modules, classes, and\nfunctions are copied from pytest. Not to mention how pytest has inspired the development\nof pytask in general. Without the excellent work of\n[Holger Krekel](https://github.com/hpk42) and pytest's many contributors, this project\nwould not have been possible. Thank you!\n\npytask owes its beautiful appearance on the command line to\n[rich](https://github.com/Textualize/rich), written by\n[Will McGugan](https://github.com/willmcgugan).\n\nRepeating tasks in loops is inspired by [ward](https://github.com/darrenburns/ward)\nwritten by [Darren Burns](https://github.com/darrenburns).\n\n# Citation\n\nIf you rely on pytask to manage your research project, please cite it with the following\nkey to help others to discover the tool.\n\n```bibtex\n@Unpublished{Raabe2020,\n    Title  = {A Python tool for managing scientific workflows.},\n    Author = {Tobias Raabe},\n    Year   = {2020},\n    Url    = {https://github.com/pytask-dev/pytask}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpytask-dev%2Fpytask","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpytask-dev%2Fpytask","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpytask-dev%2Fpytask/lists"}