‹ back home

Simple optional dependencies via meta-packages

2025-01-17 #alpine #packaging

I’ll present this idea with an example…

Context

todoman optionally depends on py3-repl. If the latter is installed, then todoman gains a new repl command which starts an interactive console.

One way of indicating that todoman optionally depends on py3-repl is to add it as an optional dependency. This requires support for optional dependencies in the package manager and all related tools.

A pitfall of this approach is that there is later no clear indicator that py3-repl is installed as an optional dependency for todoman. If it is marked as explicitly installed, then there’s no “hint” for me to later remember that I installed it as an optional dependency. I’ll likely delete it thinking that I don’t use it directly and nothing depends on it. If it is marked as a installed as a dependency, then it will removed automatically, since nothing explicitly depends on it.

A package manager might have a different behaviour: when cleaning up, it can keep around any package that is an optional dependency for another. This would result in many stale unwanted packages being kept around.

Solution

Create a new meta-package: todoman-repl. This depends on todoman and py3-repl. If I want todoman with the optional functionality, I simply install todoman-repl. The package manager won’t remove py3-repl, but it also won’t show up as installed explicitly. In fact, the list of desired packages reflects my exact intent: “I want todoman with the repl functionality”.

Advantages

This does not require any additional complexity or dedicated features in the package manager or packaging toolchain.

When the package todoman-repl is installed, it clearly reflects the intent of the user to install todoman with its repl functionality. The repl dependency is a directly dependency of an explicitly installed package.

Have comments or want to discuss this topic?
Send an email to my public inbox: ~whynothugo/public-inbox@lists.sr.ht.
Or feel free to reply privately by email: hugo@whynothugo.nl.

— § —