二进制依赖工具
项目描述
Bindep是一个检查应用程序/库使用所需的二进制软件包的工具。它最初是为了使OpenStack项目开发环境的设置更加容易而诞生的。虽然OpenStack严重依赖pip来安装Python依赖项,但有些依赖项不是基于Python的,尤其是在测试时,必须在pip可以使用之前安装一些依赖项,例如virtualenv和pip本身。
基本内容
创建一个名为 bindep.txt 的文件,并在其中列出应用程序/库的任何需求。在 README、INSTALL 或其他文档中,您可以告诉用户运行 bindep 以报告缺失的依赖项。未安装 bindep 的用户可以选择手动查看 bindep.txt 文件,或者首先安装 bindep,然后再使用它。
如果不存在 bindep.txt 文件,bindep 将检查旧位置 other-requirements.txt。
通常,bindep 的输出相当详细,但通过传递 -b/–brief 选项,只需输出每行一个缺失的软件包,适合馈送到您选择的包管理工具。
如果您需要维护多个需求列表文件,可以使用 -f/–file 命令行选项传递特定的文件名。如果您想通过管道从标准输入读取列表,请使用文件名“-”。
当 bindep 运行时,如果没有缺失描述的软件包,其退出码为 0,但如果它认为需要安装的软件包,则退出码为 1。
配置文件
配置文件可以用来描述不同的场景。例如,您可能有一个使用 PostgreSQL 的配置文件,该配置文件需要 PostgreSQL 客户端库,一个需要该客户端库的 MySQL 配置文件,以及一个需要这两个库以及服务器的测试配置文件。要选择配置文件,只需在运行 bindep 时传递它即可 - 例如。
$ bindep test
在运行 bindep 时,用户可以选择单个配置文件,没有明确选择的结果是选择 default 配置文件。bindep 将自动激活代表其运行平台的附加配置文件,这使得处理特定于平台的问题变得容易。
可用的配置文件通过检查需求文件并整理使用的配置文件名称来推断。用户可以获取有关可用的配置文件的报告
$ bindep --profiles
编写需求文件
需求文件 bindep.txt 列出项目的依赖项。如果需要非 ascii 字符,应使用 UTF8 编码。
该文件是按行定向的 - 每行是一个 Debian 二进制软件包名称,一个可选的配置文件选择器和一个可选的版本约束。注意 - 如果您正在编写替代解析器,请参阅 Debian 政策手册以了解包名称的解析规则。Debian 软件包名称作为单一的真实来源 - bindep 可以学习映射到特定的打包系统。或者,配置文件可以用来编码特定于平台的需求。
配置文件用于决定在检查依赖项时应该考虑需求文件中的哪些行。配置文件选择器是一组以空格分隔的字符串,包含在 [] 中。以 ! 前缀的选择器是负选择器。如果需求文件中的一行要生效
它不能有与活动配置文件匹配的负选择器。
它必须没有正选择器,或者有一个与活动配置文件匹配的正选择器。
例如,配置文件选择器 [!qpid] 将匹配除了 qpid 之外的所有配置文件,这适用于在 qpid 使用时禁用 rabbitmq 的安装。 [default] 只有在用户没有选择配置文件(或选择了 default)时才会匹配。 [default postgresql test] 将匹配这三个配置文件,但不匹配 mysql。 [platform:rhel] 仅在 RHEL Linux 环境中运行时才会匹配。
请注意,平台选择器被视为一种过滤器:如果一行包含平台选择器,则只有在其他选择器匹配的情况下,软件包才会被安装。例如,[platform:rpm test] 只有在使用 test 选择器时,才会安装在 RPM 平台上。
还可以使用 () 将配置文件分组。在组中,所有配置文件都必须匹配,组才能匹配。例如,[test (ceph glance !lvm)],要选择软件包,必须指定 test 或者 (ceph AND glance AND NOT lvm)。平台选择器在组内无效。
版本约束是一个由逗号分隔的约束列表,其中每个约束是 (== | < | <= | >= | > | !=) VERSION,并且约束通过 AND 连接在一起(与 pip 的版本约束相同,但要求在依赖关系和版本约束之间有一个空格)。
允许注释:从第一个 # 到行尾的所有内容都将被忽略。
示例
一个简单的示例,使用测试配置文件:
# A runtime dependency libffi6 # A build time dependency libffi-devel [test]
bindep 会选择所有情况下的 libffi6 软件包,如果使用 bindep test 选择 test 配置文件,则两个软件包都会被选择。
如果需要部署 Debian、Gentoo 和基于 RPM 的发行版,则需要支持 libxml2 开发库,则 bindep.txt 文件可以包含:
libxml2-dev [platform:dpkg] libxml2-devel [platform:rpm] libxml2-utils [platform:dpkg] dev-libs/libxml2 [platform:gentoo]
这将选择 Debian 和 Ubuntu 这样的基于 Debian 的发行版上的 libxml2-dev 和 libxml2-utils 软件包,因为这些条目有 platform:dpkg 配置文件,RPM 基础发行版(如 CentOS、Fedora、openSUSE、Red Hat 或 SUSE Linux)上的 libxml2-devel,因为这些条目有 platform:rpm 配置文件,Gentoo 上的 dev-libs/libxml2,因为这个条目有 platform:gentoo 配置文件。
此外,您可以使用 platform:redhat 或 platform:suse 来分别仅匹配类似 RedHat 或类似 SUSE 的发行版,如下例所示:
openssh-server [platform:redhat] openssh [platform:suse]
如果您需要区分 python2 或 python3 是官方解释器的操作系统,可以使用 base-py2 和 base-py3 标签。请注意,即使系统可以支持安装多个 python 版本,一个操作系统也只会暴露一个。
python3-lxml [(platform:redhat platform:base-py3)] python-lxml [(platform:redhat platform:base-py2)]
上述示例将在平台使用的官方 python 上安装 lxml python 模块。请注意,base-py[23] 支持目前仅在 Debian、Ubuntu、RedHat 品味和 MacOS 上实现。
要选择 Python3 开发包,可以使用:
python3-all-dev [platform:dpkg !platform:ubuntu-precise] python3-devel [platform:fedora] python34-devel [platform:centos]
这将选择所有基于 Debian 的发行版上的 python3-all-dev(除了 Ubuntu Precise),Fedora 上的 python3-devel 和 CentOS 上的 python34-devel。
要选择 curl 软件包:
curl [!platform:gentoo] net-misc/curl [platform:gentoo]
这将选择所有发行版上的 curl 软件包(除了 Gentoo),仅在 Gentoo 上选择 net-misc/curl。
要根据配置文件组选择软件包:
ceph-common [ceph] python-rbd [(ceph glance)]
当指定配置文件 ceph 时,这将选择 ceph-common 软件包。然而,当 ceph 和 glance 配置文件都处于活动状态时,它只会选择 python-rbd 软件包。
指定软件包版本
python >=3.7,<=3.8 grep >=3.3 # OR with a platform profile python [platform:brew] ==3.7.3
要查看更全面的示例,请查看 bindep.txt 文件,该文件用于在多个平台上测试 bindep 本身。
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪个,请了解有关 安装软件包 的更多信息。