Sysdep: A simple system dependency tool

I have just released the initial version of sysdep.

Sysdep reads the apt/pip dependencies specified in the system_dependencies.toml. You could search in the current directory only or recursively to retrieve all of the dependencies with the specific version at once.

This provides a good separation of binary and source dependencies, with the ability to specify the versions too.

As compared to the standard tool rosdep to install system dependencies from package.xml, sysdep would complement rosdep, reduce the need to update the rosdep rules while developing. This allows the system dependencies to be explicitly specified without any name remapping and source dependencies to be defined in package.xml.

Once the package is ready to be released with bloom, rosdep rules and package.xml could then be updated accordingly.

Hope this is useful for the community. Any questions, comments, and suggestions are welcome!

2 Likes

Obligatory xkcd comic:

2 Likes

Yes, the inability of rosdep to satisfy version requirements from package.xml is a pity, at least for pip.

But if you bloom a package, you can’t use pip deps anyway, so I don’t see the use-case for this tool (except for local development). And it doesn’t make sense to want apt to install specific versions.

Adding packages to the rosdep database is actually quite easy. Pull requests do usually get merged in under 24 hours. And if even that is too slow for you, you can always maintain a local rosdep definitions file and then slowly start working on upstreaming it.

1 Like

@Benjamin-Tan I agree that a more direct dependency management would greatly improve the status quo. I think you may want to look at my recent proposal to the Production WG, which includes a similar solution as yours, among other features (feedback is welcome):

I would say the contrary. Finding a package name for your distro is much easier than all. Maintaining a huge mapping at a central repo has no marginal benefit but a maintenance burden for everyone.

1 Like

I left some feedback on the PR, thanks for pointing at it. Here, I’ll just correct you that to get a rosdep key to rosdistro, you’re required to find the package on 4 platforms, not on all.

There is still the need to specify a version for apt dependency such as cuda, tensorrt, when the latest version is not supported by the physical hardware.

Apt can most of the time only check that the installed version is comptaible, but it can’t force a different one. You would have to use other techniques to install other versions (apt pinning, adding a ppa, installing from local deb).

I agree even the version check is important. That is a feature that could (should) be added to rosdep because package.xml format 3 already allows specifying version constraints. There’s no need for an extra tool regarding this feature.