There are situations where you want to structure your project as a multi-package workspace. Reasons are
- You are developing a scientific package alongside the project that you want to publish later.
- The code for dealing with the dataset should be reused in other projects.
- You want to strictly separate the pytask tasks from the remaining code to be able to switch to another build system.
In those instances, a workspace might be the right choice.
project
├── packages
│ ├── data
│ │ ├── pyproject.toml
│ │ └── src
│ │ └── data
│ │ ├── __init__.py
│ │ └── ...
│ ├── analysis
│ │ ├── pyproject.toml
│ │ └── src
│ │ └── analysis
│ │ ├── __init__.py
│ │ └── ...
│ └── tasks
│ ├── pyproject.toml
│ └── src
│ └── tasks
│ ├── __init__.py
│ └── ...
│
├── pyproject.toml
├── README.md
├── ...
uv provides excellent support for workspaces which you can read more about in the uv documentation.
pixi is still working on a native workspace experience, but there are workarounds.