# 4 パッケージと配布物の関係 (Relationships between Distributions and Packages)

配布物はパッケージと3種類の方法で関係します:

1. パッケージかモジュールを要求する。

2. パッケージかモジュールを提供する。

3. パッケージかモジュールを廃止する。

これらの関係は、`distutils.core.setup()`関数のキーワード引数を 利用して指定することができます。

他のPythonモジュールやパッケージに対する依存は、`setup()`の requiresキーワード引数で指定できます。 引数の値は文字列のリストでなければなりません。 各文字列は、必要とするパッケージと、オプションとしてパッケージのバージョンを 指定します。

あるモジュールかパッケージの任意のバージョンが必要な場合、 指定する文字列はモジュール名かパッケージ名になります。例えば、 `'mymodule'` や `'xml.parsers.expat'` を含みます。

特定のバージョンが必要な場合、修飾子(qualifier)の列を加えることができます。 各修飾子は、比較演算子とバージョン番号からなります。利用できる比較演算子は:

    <    >    ==
    <=   >=   !=

これらの修飾子はカンマ(空白文字を入れても良いです)で区切って複数並べることができます。 その場合、全ての修飾子が適合する必要があります; 評価する時に論理ANDでつなげられます。

いくつかの例を見てみましょう:

require式 | 説明
--- | ---
`==1.0` | version `1.0` のみが適合します
`>1.0, !=1.5.1, <2.0` | `1.5.1` を除いて、 `1.0` より後ろで `2.0` より前の全てのバージョンに適合します。

これで、依存を指定することができました。同じように、この配布物が他の配布物に 必要とされる何を提供するのかを指定する必要があります。 これは、`setup()` の provide キーワード引数によって指定できます。 この引数の値は文字列のリストで、各要素はPythonモジュールかパッケージの名前です。 バージョンを指定することもできます。 もしバージョンが指定されなかった場合、配布物のバージョン番号が利用されます。

いくつかの例です:

provide 式 | 説明
--- | ---
`mypkg` | `mypkg` を提供します。バージョンは配布物のものを使います。
`mypkg (1.1` | `mypkg` version 1.1 を提供します。配布物のバージョン番号は 気にしません

パッケージは obsoletes キーワードを利用することで、他のパッケージを廃止することを 宣言することもできます。 この値はrequiresキーワードと似ています: モジュールやパッケージを指定する文字列の リストです。各文字列は、モジュールかパッケージの名前と、オプションとして一つ以上のバージョン 指定から構成されています。バージョン指定は、モジュールやパッケージの名前のうしろに、 丸括(parentheses)でかこわれています。

指定されたバージョンは、その配布物によって廃止されるバージョンを示しています。 バージョン指定が存在しない場合は、指定された名前のモジュールまたはパッケージの 全てが廃止されたと解釈されます。