#
3 別の場所へのインストール

しばしば、サードパーティ製 Python モジュールをインストールするための 標準の場所以外にモジュールをインストールしなければならなかったり、 単にそうしたくなるときがあります。例えばUnix システムでは、標準のサード パーティ製モジュールディレクトリに対する書き込み権限を持っていないかも しれません。または、あるモジュールを、ローカルで使っている Python に 標準のモジュールの一部として組み込む前にテストしてみたいと思う かもしれません。既存の配布物をアップグレードする際には特にそうでしょう: 実際にアップグレードする前に、既存のスクリプトの基本となる部分が 新たなバージョンでも動作するか確認したいはずです。

Distutils の `install` コマンドは、別の場所へ配布物をインストール する作業を単純で苦労のない作業にするように設計されています。 基本的なアイデアは、インストール先のベースディレクトリを指定しておき、 `install` コマンドがそのベースディレクトリ下にファイル群を インストールするための一連のディレクトリ (インストールスキーム : installation scheme) を作成するというものです。 詳細はプラットフォームによって異なるので、以下の節から自分の プラットフォームに当てはまるものを読んでください。

##
1 別の場所へのインストール: home スキーム

``home スキーム'' の背後にある考え方は、Python モジュールを 個人用のモジュール置き場でビルドし、維持するというものです。 このスキームの名前は Unixの「ホーム」ディレクトリの概念から とりました。というのも、 Unixのユーザにとって、自分のホーム ディレクトリを/usr/ や /usr/local/ のようにレイアウト するのはよくあることだからです。とはいえ、このスキームはどの オペレーティングシステムのユーザでも使えます。 新たなモジュールのインストールは単純で、

    python setup.py install --home=<dir>

のようにします。このとき、--home オプションを使って ディレクトリを指定します。面倒臭がりの人は、単にチルダ (`~`) をタイプするだけでかまいません; `install` コマンドがチルダをホームディレクトリに 展開してくれます:

    python setup.py install --home=~

--home オプションは、インストールのベースディレクトリ を指定します。ファイルはインストールベース下の以下のディレクトリに 保存されます:

ファイルの種類 | インストール先ディレクトリ | オーバライドするためのオプション
--- | --- | ---
pure モジュール配布物 | home/lib/python | --install-purelib
非 pure モジュール配布物 | home/lib/python | --install-platlib
スクリプト | home/bin | --install-scripts
データ | home/share | --install-data

バージョン 2.4 で 変更 された仕様: --home は Unixでしかサポートされて いませんでした

##
2 別の場所へのインストール: Unix (prefix スキーム)

あるインストール済みの Python を使ってモジュールのビルド/インストール を (例えば setup スクリプトを実行して) 行いたいけれども、 別のインストール済みの Python のサードパーティ製モジュール置き場 (あるいは、そう見えるようなディレクトリ構造) に、ビルドされた モジュールをインストールしたい場合には、``prefix スキーム'' が 便利です。そんな作業はまったくありえそうにない、と思うなら、 確かにその通りです -- ``home スキーム'' を先に説明したのも そのためです。とはいえ、prefix スキームが有用なケースは少なくとも 二つあります。

まず、多くの Linux ディストリビューションは、 Python を /usr/local ではなく /usr に置いていることを考えてください。この場合は、 Python はローカルの計算機ごとのアドオン (add-on) ではなく、``システム'' の一部となっているので、/usr に置くのは全く正当なことです。 しかしながら、 Python モジュールをソースコードからインストール していると、モジュールを /usr/lib/python2.X ではなく /usr/local/lib/python2.X に置きたいと 思うかもしれません。これを行うには

    /usr/bin/python setup.py install --prefix=/usr/local

と指定します。

もう一つありえるのは、ネットワークファイルシステムにおいて、 遠隔のディレクトリに対する読み出しと書き込みの際に違う名前を使う 場合です。 例えば、 /usr/local/bin/python でアクセスするような Python インタプリタは、 /usr/local/lib/python2.X から モジュールを探すでしょうが、モジュールは別の場所、例えば /mnt/@server/export/lib/python2.X に インストールしなければならないかもしれません。この場合には、

    /usr/local/bin/python setup.py install --prefix=/mnt/@server/export

のようにします。

どちらの場合も、--prefix オプションでインストール ベースディレクトリを決め、 --exec-prefix で プラットフォーム固有のファイル置き場名として使う、 プラットフォーム固有インストールベースディレクトリを決めます。 (プラットフォーム固有のファイルとは、現状では単に非 pure モジュール 配布物のことを意味しますが、 C ライブラリやバイナリ実行可能形式など に拡張されるかもしれません。) --exec-prefix が指定されていなければ、デフォルトの --prefix になります。ファイルは以下のようにインストールされます:

ファイルの種類 | インストール先ディレクトリ | オーバライドするためのオプション
--- | --- | ---
pure モジュール配布物 | prefix/lib/python2.X/site-packages | --install-purelib
非 pure モジュール配布物 | exec-prefix/lib/python2.X/site-packages | --install-platlib
スクリプト | prefix/bin | --install-scripts
データ | prefix/share | --install-data

--prefix や --exec-prefix が実際に 他のインストール済み Python の場所を指している必要はありません; 上に挙げたディレクトリがまだ存在しなければ、インストール時に 作成されます。

ちなみに、prefix スキームが重要な本当の理由は、単に標準の Unix インストールが prefix スキームを使っているからです。ただし、 そのときには、 --prefix や --exec-prefix は Python 自体が `sys.prefix` や `sys.exec_prefix` を使って 決めます。というわけで、読者は prefix スキームを決して使うことは あるまいと思っているかもしれませんが、`python setup.py install` をオプションを何もつけずに実行していれば、常に prefix スキームを 使っていることになるのです。

拡張モジュールを別のインストール済み Python にインストールしても、 拡張モジュールのビルド方法による影響を受けることはありません: 特に、拡張モジュールをコンパイルする際には、 setup スクリプトを実行する際に使う Python インタプリタと一緒に インストールされている Python ヘッダファイル (Python.h とその仲間たち) を使います。 上で述べてきたやり方でインストールされた拡張モジュールを実行する インタプリタと、インタプリタをビルドする際に用いた別のインタプリタ との互換性を保証するのはユーザの責任です。

これを行うには、二つのインタプリタが同じバージョンの Python (ビルドが違って いたり、同じビルドのコピーということもあり得ます) であるかどうかを 確かめます。(もちろん、--prefix や --exec-prefix が別のインストール済み Python の場所すら 指していなければどうにもなりません。)

##
3 別の場所へのインストール (prefix を使う方法): Windows

Windows はユーザのホームディレクトリという概念がなく、 Windows 環境下で標準的にインストールされた Python は Unixよりも 単純な構成をしているので、 Windows で追加のパッケージを別の場所に入れる 場合には、伝統的に --prefix が使われてきました。

    python setup.py install --prefix="\Temp\Python"

とすると、モジュールを現在のドライブの \Temp\Python ディレクトリに インストールします

インストールベースディレクトリは、 --prefix オプション だけで決まります; --exec-prefix オプションは、Windows ではサポートされていません。ファイルは以下のような構成でインストール されます:

ファイルの種類 | インストール先ディレクトリ | オーバライドするためのオプション
--- | --- | ---
pure モジュール配布物 | prefix | --install-purelib
非 pure モジュール配布物 | prefix | --install-platlib
スクリプト | prefix\Scripts | --install-scripts
データ | prefix\Data | --install-data