Requires: Python(package) 对 RHEL 规范文件有什么作用?

Requires: Python(package) 对 RHEL 规范文件有什么作用?

我目前正在打包一些没有 RPM 的 Python 包,其中一些依赖于我正在打包的其他包。

在打包时,我注意到人们这样做的格式:Require: python(pkg-name),但我试图了解是否有任何特定的语法来使用它?因为当它被使用时,它似乎并不关心所需包的版本。

例子:

Requires: Python(gocd-cli) >= 0.9

在我构建 RPM 后显示在需求列表中:

$ rpm -qp --requires dist/gocd-cli.encryption.blowfish-1.0-1.noarch.rpm
Python(gocd-cli) >= 0.9
python(abi) = 2.6
python-crypto
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1

尽管 gocd-cli 软件包版本 >= 0.9 尚未构建并可用,但该软件包安装得非常好。

总而言之,我想要理解的是:

  1. 应该如何Requires: Python()使用呢?
  2. 这部分叫什么Python()?我也见过 Ruby、Perl 和其他语言......

答案1

虽然 Ruby 和 Perl 模块使用这些虚拟提供,但据我所知 python 不使用它们。

它只不过是虚拟供应(参见创建虚拟功能章节)。如果您知道要使用哪个模块但不知道哪个包包含它,那么它会很有用。虽然在大多数情况下它非常简单并perl-foo提供perl(foo),但有些情况并不那么简单。例如perl(APR)由提供mod_perl

Perl 的虚拟提供程序相当古老,直接由 rpm 和 rpmbuild 处理。过去在 Ruby 中你必须手动添加它们,但现在它也由 rpm 处理。对于 python 来说,没有人会推动这一变化,而且它通常不使用这些虚拟资源。所以你必须需要准确的包名称。

结论:

如果你正在打包 python 库,那么放入spec 没有什么坏处:

Provides: python(foo) = %{version}-%{release}

然而,你不应该期望其他 python 模块有这个提供,你需要使用正常的包名称来要求它们。

最后一点 - 要求/提供区分大小写,因此 Python(foo) != python(foo)。

相关内容