Centos

Requires: Python(package) 對 RHEL 規範文件有什麼作用?

  • November 21, 2016

我正在打包一些目前沒有 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 和其他人看到過它……

雖然 Ruby 和 Perl 模組使用這些虛擬提供,但 AFAIK python 不使用它們。

它只不過是虛擬提供(參見創建虛擬能力一章)。如果您知道要使用哪個模組但不知道哪個包包含它,這將很有用。雖然在大多數情況下它非常簡單並且perl-foo提供了perl(foo),但有些情況並不那麼簡單。例如perl(APR)由 提供mod_perl

Perl 的虛擬提供相當古老,由 rpm 和 rpmbuild 直接處理。過去在 Ruby 中您必須手動添加它們,但現在它也由 rpm 處理。對於 python 來說,沒有人會推動這一變化,而且它通常不使用那些虛擬提供。所以你必須要求準確的包名。

結論:

如果您正在打包 python 庫,則放入規範沒有害處:

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

但是你不應該期望其他 python 模組有這個提供,你需要使用正常的包名稱來要求它們。

最後一點 - 要求/提供區分大小寫,因此 Python(foo) != python(foo)。

引用自:https://unix.stackexchange.com/questions/238663