Centos
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 尚未建構並可用,但此軟體包安裝得非常好。
總之,我想了解的是:
- 應該怎麼
Requires: Python()
用?- 那個
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)。