私は現在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などの他の言語も見ました...
ベストアンサー1
RubyとPerlモジュールはこれらの仮想プロバイダを使用しますが、私が知っている限り、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)。