Python developers record their dependencies on other Python packages in requirements.txt and test-requirements. But some packages havedependencies outside of python and we should document thesedependencies as well so that operators, developers, and CI systems
know what needs to be available for their programs.
Bindep is a solution to this, it allows to document binarydependencies in a single file. It even distribution the package - Debian, Fedora, Gentoo, openSUSE, RHEL, SLES and Ubuntu have different package names - and allows profiles, like a test profile.
Bindep is of the tools the OpenStack Infrastructure team has written and maintains. It is in use by already over 130 repositories.
For better bindep adoption, name of the default file used by bindep from other-requirements.txt to bindep.txt and have pushed changes to master branches of repositories for this.
Projects are encouraged to create their own bindep files. Besides documenting what is required, it also gives a speedup in running tests since you install only what you need and not all packages that some other project might need and by default. Each test system comes with a basic installation and then we either add the repo defined package list or the large default list.
In the OpenStack CI infrastructure, we use the "test" profile for installation of packages. This allows projects to document their run time dependencies - the default packages - and the additional packages needed for testing.
Be aware that bindep is not used by devstack based tests, those have their own way to document dependencies.
Let's look at the log file for a normal installation with using the default dependencies:
If you want to learn more about bindep, read the Infra Manual on package requirements
or the bindep manual.
If you have questions about bindep, feel free to ask the Infra team on #openstack-infra.
Thanks to Anita for reviewing and improving this blog post and to the OpenStack Infra team that maintains bindep, especially to Jeremy Stanley and Robert Collins.