@@ -82,6 +82,67 @@ the task-running side:
8282- Conda integration: tasks can target specific conda environments using
8383 ` -n ` /` -p ` flags, matching conda's standard interface.
8484
85+ ## Prior art
86+
87+ The idea of running commands from a project definition is not new in the
88+ conda ecosystem. Several tools have explored this space, each with a
89+ different scope.
90+
91+ ### anaconda-project
92+
93+ [ anaconda-project] ( https://github.com/Anaconda-Platform/anaconda-project )
94+ was one of the first tools to combine conda environments with project
95+ commands. Its ` anaconda-project.yml ` lets you define named commands,
96+ platform-specific variants (` unix: ` / ` windows: ` ), and service
97+ dependencies. Running ` anaconda-project run ` automatically sets up the
98+ environment before executing. It focuses on reproducible project
99+ launchers rather than build-style task graphs -- there is no way to
100+ express dependencies between commands, no caching, and no templating.
101+
102+ ### conda-project
103+
104+ [ conda-project] ( https://github.com/conda-incubator/conda-project ) is a
105+ community successor to anaconda-project, maintained under conda-incubator.
106+ It modernizes the workflow with ` conda-lock ` integration and a
107+ ` conda project run ` command. Like its predecessor, it centers on
108+ environment management and command execution rather than task
109+ orchestration -- commands cannot depend on each other.
110+
111+ ### conda-execute
112+
113+ [ conda-execute] ( https://github.com/pelson/conda-execute ) takes a
114+ different approach: embed environment requirements directly in a script's
115+ header comments, then run it in an auto-created temporary environment.
116+ It is aimed at one-off scripts rather than multi-step project workflows.
117+
118+ ### conda run
119+
120+ Conda itself ships ` conda run -n <env> <command> ` , which activates an
121+ environment and runs a single command. It is the low-level primitive that
122+ conda-tasks builds on, but it has no concept of task definitions,
123+ dependencies, or caching.
124+
125+ ### General-purpose Python task runners
126+
127+ Tools like [ tox] ( https://tox.wiki ) , [ nox] ( https://nox.thea.codes ) ,
128+ [ invoke] ( https://www.pyinvoke.org ) , and
129+ [ hatch] ( https://hatch.pypa.io ) each provide ways to define and run
130+ project tasks. tox and nox focus on test-matrix automation with
131+ virtualenvs; invoke is a general-purpose Make replacement; hatch offers
132+ scripts and environment matrices for Python projects. None of them
133+ integrate directly with conda environments or conda's plugin system.
134+
135+ ### pixi
136+
137+ [ pixi] ( https://pixi.sh ) by [ prefix.dev] ( https://prefix.dev ) was the
138+ first tool to ship a full-featured task runner tightly integrated with
139+ conda package management: task dependencies, platform overrides,
140+ input/output caching, template variables, and task arguments. Its task
141+ system is the direct inspiration for conda-tasks. The key difference is
142+ that pixi manages both environments and tasks, while conda-tasks
143+ deliberately handles only the task-running side and leaves environment
144+ management to conda.
145+
85146## Acknowledgements
86147
87148conda-tasks would not exist without the work of the
@@ -91,3 +152,9 @@ template variables, and the overall developer experience -- comes directly
91152from their implementation. We are grateful for their contribution to the
92153conda ecosystem and for setting the bar on what a project task runner
93154should look like.
155+
156+ The [ anaconda-project] ( https://github.com/Anaconda-Platform/anaconda-project )
157+ and [ conda-project] ( https://github.com/conda-incubator/conda-project )
158+ teams explored running commands from project manifests long before
159+ conda-tasks existed. Their work informed how project-level automation
160+ fits into the conda ecosystem.
0 commit comments