#
2 標準的なビルド・インストール作業

1.2 節で述べたよいうに、 Distutils を使ったモジュール 配布物のビルドとインストールは、通常は単純なコマンド:

    python setup.py install

で行います。

Unixでは、このコマンドをシェルプロンプトで行います; Windows では、 コマンドプロンプトウィンドウ (``DOS ボックス'') を開いて、そこで 行います; Mac OS X の場合、`Terminal` ウィンドウを開いて シェルプロンプトを出してください。

##
1 プラットフォームによる違い

setup コマンドは常に配布物ルートディレクトリ、すなわちモジュールの ソース配布物を展開した際のトップレベルのサブディレクトリ内で 実行しなければなりません。例えば、あるモジュールのソース配布物 foo-1.0.tar.gz を Unix システム上にダウンロードしたなら、 通常は以下の操作を行います:

    gunzip -c foo-1.0.tar.gz | tar xf -    # unpacks into directory foo-1.0
    cd foo-1.0
    python setup.py install

Windows では、おそらく foo-1.0.zip をダウンロードしている でしょう。アーカイブファイルを C:\Temp に ダウンロードしたのなら、(WinZip のような) グラフィカルユーザ インタフェースつきのアーカイブ操作ソフトや、 (unzip や pkunzip のような) コマンドラインツールを使って アーカイブを展開します。次に、コマンドプロンプトウィンドウ (``DOS ボックス'') を開いて、以下を実行します:

    cd c:\Temp\foo-1.0
    python setup.py install

##
2 ビルド作業とインストール作業を分割する

`setup.py install` を実行すると、一度の実行で全てのモジュールを ビルドしてインストールします。段階的に作業をしたい場合 -- ビルド プロセスをカスタマイズしたり、作業がうまくいかない場合に特に便利 です -- には、setup スクリプトに一度に一つづつ作業を行わせるよう にできます。この機能は、ビルドとインストールを異なるユーザで 行う場合にも便利です -- 例えば、モジュール配布物をビルドしておいて システム管理者に渡して (または、自分でスーパユーザになって) 、 インストールしたくなるかもしれません.

最初のステップでは全てをビルドしておき、次のステップで 全てをインストールするには、 setup スクリプトを二度起動します:

    python setup.py build
    python setup.py install

この作業を行ってみれば、`install` コマンドを実行すると まず `build` コマンドを実行し、さらに -- この場合には -- build ディレクトリの中が全て最新の状態になっているので、 `build` は何も行わなくてよいと判断していることが わかるでしょう。

インターネットからダウンロードしたモジュールをインストールしたい だけなら、上のように作業を分割する機能は必要ないかもしれませんが、 この機能はより進んだ使い方をする際にはとても便利です。 自作の Python モジュールや拡張モジュールを配布することになれば、 個々の Distutils コマンドを自分で何度も実行することになるでしょう。

##
3 ビルドの仕組み

上で示唆したように、 `build` コマンドは、インストールすべき ファイルを ビルドディレクトリ (build directory) に置く働きが あります。デフォルトでは、ビルドディレクトリは配布物ルート下の build になります; システムの処理速度に強いこだわりがあったり、 ソースツリーに指一本触れたくないのなら、--build-base オプションを使ってビルドディレクトリを変更できます。例えば:

    python setup.py build --build-base=/tmp/pybuild/foo-1.0

(あるいは、システム全体向け、あるいは個人用の Distutils 設定ファイルに ディレクティブを書いて、永続的に設定を変えられます; 5 節を参照してください。) 通常は必要ない作業です。

ビルドツリーのデフォルトのレイアウトは以下のようになっています:

    --- build/ --- lib/
    または
    --- build/ --- lib.<plat>/
                   temp.<plat>/

`<plat>` は、現在の OS/ハードウェアプラットフォームと Python のバージョンを記述する短い文字列に展開されます。 第一の lib ディレクトリだけの形式は、 ``pure モジュール配布物'' -- すなわち、pure Python モジュールだけの入ったモジュール配布物 -- の場合に使われます。モジュール配布物に何らかの拡張モジュール (C/C++ で書かれたモジュール) が入っている場合、第二の `<plat>` 付きディレクトリが二つある形式が使われます。この場合、 temp.plat ディレクトリには、コンパイル/リンク 過程で生成され、実際にはインストールされない一時ファイルが収められます。 どちらの場合にも、lib (または lib.plat) ディレクトリには、最終的にインストールされることになる全ての Python モジュール (pure Python モジュールおよび拡張モジュール) が入ります。

今後、 Python スクリプト、ドキュメント、バイナリ実行可能形式、 その他 Python モジュールやアプリケーションのインストール作業に 必要なディレクトリが追加されるかもしれません。

##
4 インストールの仕組み

`build` コマンドを実行した後 (明示的に実行した場合も、 `install` コマンドが代わりに実行してくれた場合も) は、 `install` コマンドの仕事は比較的単純なもの: build/lib (または build/lib.plat) の下にあるもの全ての 指定したインストールディレクトリへのコピー、になります。

インストールディレクトリを選ばなかった場合 -- すなわち、 `setup.py install` を実行しただけの場合 -- には、`install` コマンドはサードパーティ製 Python モジュールを置くための標準の場所に インストールを行います。この場所は、プラットフォームや、Python 自体を どのようにビルド/インストールしたかで変わります。 Unix (と、Unix をベースとしたMac OS X) では、インストールしようとするモジュール配布物が pure Python なのか、 拡張モジュールを含む (``非 pure'') のかによっても異なります:

プラットフォーム | 標準のインストール場所 | デフォルト値 | 注記
--- | --- | --- | ---
Unix (pure) | prefix/lib/python2.5/site-packages | /usr/local/lib/python2.5/site-packages | (1)
Unix (非 pure) | exec-prefix/lib/python2.5/site-packages | /usr/local/lib/python2.5/site-packages | (1)
Windows | prefix | C:\Python | (2)

注記:

(1)
  ほとんどの Linux ディストリビューションには、システムの 標準インストール物として Python が入っているので、 Linux では普通、 prefix や exec-prefix はどちらも /usr になります。 Linux (または Unixライクなシステム) 上で自分で Python をビルドした場合、デフォルトの prefix および exec-prefix は /usr/local になります。
(2)
  Windows での Python のデフォルトインストールディレクトリは、 Python 1.6a1、 1.5.2、およびそれ以前のバージョンでは C:\Program Files\Python です。

prefix および exec-prefix は、 Python がインストール されているディレクトリと、実行時にライブラリを探しにいく場所を表します。 これらのディレクトリは、Windows では常に同じで、 Unixと Mac OS X でも ほぼ常に同じです。自分の Python がどんな prefix や exec-prefix を使っているかは、Python を対話モードで起動して、 単純なコマンドをいくつか入力すればわかります。 Windows では、スタート > (すべての) プログラム > Python 2.5 > Python (command line) を選びます。 Mac OS 9 では、 PythonInterpreter を起動します。 インタプリタを起動すると、プロンプトに Python コードを入力 できます。例えば、作者の使っている Linux システムで、三つの Python 文を以下のように入力すると、出力から作者のシステムの prefix と exec-prefix を得られます:

    Python 2.4 (#26, Aug  7 2004, 17:19:02)
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys
    >>> sys.prefix
    '/usr'
    >>> sys.exec_prefix
    '/usr'

モジュールを標準の場所にインストールしたくない場合や、標準の場所に インストールするためのファイル権限を持っていない場合、 3 節にある、別の場所へのインストール方法の説明を読んでください。 インストール先のディレクトリを大幅にカスタマイズしければ、 4 節のカスタムインストールに関する説明を読んでください。