Understanding Python Dependency Management: Groups vs Optional Dependencies
Dependency Groups
Currently, PEP supports two approaches for grouping extra dependencies:
In this document, we introduce both approaches using uv
.
Dependency Groups
If dependencies are only required for project development, we can use dependency-groups
to manage them. For example, development tools like pytest
and ruff
are needed for development but not for production.
1 | [dependency-groups] |
To install dependencies from a specific group, use:
1 | uv sync --group cuda |
Optional Dependencies
If dependencies are intended for package users, we can use optional-dependencies
to manage them. For example, torch
offers both CPU and GPU
versions, and we can differentiate them using optional-dependencies
.
1 | [project.optional-dependencies] |
To install optional dependencies, use:
1 | uv sync --extra cuda |
Conclusion
Both approaches group dependencies, but the key difference is their target audience:
dependency-groups
are used for managing dependencies needed by project developers.optional-dependencies
are used for managing dependencies required by package users.