たまに、 3 節で述べたような別の場所へのインストール スキームが、自分のやりたいインストール方法と違うことがあります。 もしかすると、同じベースディレクトリ下にあるディレクトリのうち、 一つか二つだけをいじりたかったり、インストールスキームを完全に 再定義したいと思うかもしれません。どちらの場合にせよ、こうした操作では カスタムのインストールスキーム を作成することになります。
別の場所へのインストールスキームに関するこれまでの説明で、 ``オーバライドするためのオプション'' というコラムにお気づきかも しれません。このオプションは、カスタムのインストールスキームを 定義するための手段です。各オーバライドオプションには、 相対パスを指定しても、絶対パスを指定しても、インストールベース ディレクトリのいずれかを明示的に指定してもかまいません。 (インストールベースディレクトリは二種類あり、それら二つは通常は 同じディレクトリです -- Unix の ``prefix スキーム'' を使っていて、 --prefix と --exec-prefix オプションを 使っているときだけ異なります。)
例えば、 Unix環境でモジュール配布物をホームディレクトリにインストール したい -- とはいえ、スクリプトは ~/bin ではなく ~/scripts に置きたい -- とします。 ご想像の通り、スクリプトを置くディレクトリは、 --install-scripts オプションで上書きできます; この場合は相対パスで指定もでき、インストールベースディレクトリ (この場合にはホームディレクトリ) からの相対パスとして解釈されます:
python setup.py install --home=~ --install-scripts=scripts
python setup.py install --install-scripts=/usr/local/bin
Windows 用の Python を管理しているのなら、サードパーティ製モジュール を prefix そのものの下ではなく、 prefix の下 にあるサブディレクトリに置きたいと考えるかもしれません。 この作業は、インストールディレクトリのカスタマイズとほぼ同じくらい 簡単です -- 覚えておかねばならないのは、モジュールには二つのタイプ、 pure モジュールと非 pure モジュール (非 pure モジュール配布物内の モジュール) があるということです。例えば以下のようにします:
python setup.py install --install-purelib=Site --install-platlib=Site
指定したインストール先ディレクトリは、prefix からの相対です。 もちろん、prefix を .pth ファイルに入れるなどして、 これらのディレクトリが Python のモジュール検索パス内に入るように しなければなりません。 Python のモジュール検索パスを修正する方法は、 4.1 節を参照してください。
インストールスキーム全体を定義したいのなら、全てのインストール ディレクトリオプションを指定しなければなりません。この作業には、 相対パスを使った指定を勧めます; 例えば、全ての Python モジュール 関連ファイルをホームディレクトリ下の python ディレクトリの 下に置き、そのホームディレクトリをマウントしている各プラットフォーム ごとに別のディレクトリを置きたければ、以下のようにインストールスキーム を定義します:
python setup.py install --home=~ \ --install-purelib=python/lib \ --install-platlib=python/lib.$PLAT \ --install-scripts=python/scripts --install-data=python/data
python setup.py install --home=~/python \ --install-purelib=lib \ --install-platlib='lib.$PLAT' \ --install-scripts=scripts --install-data=data
$PLAT
は、(必ずしも) 環境変数ではありません --
この表記は、 Distutils がコマンドラインオプションの解釈と同じやり方
で展開します。設定ファイルを解釈する際と同じです。
言うまでもないことですが、毎回新たなモジュール配布物をインストールする 度にインストールスキーム全体の指定を行っていては面倒です。そこで、 オプションは Distutils 設定ファイル (5 参照) にも 指定できます:
[install] install-base=$HOME install-purelib=python/lib install-platlib=python/lib.$PLAT install-scripts=python/scripts install-data=python/data
[install] install-base=$HOME/python install-purelib=lib install-platlib=lib.$PLAT install-scripts=scripts install-data=data
python setup.py --install-base=/tmp
読者は、設定ファイル例で、入力値に $HOME
や $PLAT
を
使っていることに気づいているかもしれませんね。これらは Distutils の
設定変数で、環境変数を彷彿とさせます。実際、この表記が使える
プラットフォーム上では、設定ファイル中に環境変数を入れられますが、
Distutils は他にも、例えば $PLAT
のようにおそらくユーザの
環境中にないような変数をいくつか持っています。(そしてもちろん、
Mac OS 9 のような環境変数のないシステムでは、設定ファイル中で
使える変数は Distutils が提供しているものだけです。)
Python インタプリタが import 文を実行するとき、
インタプリタは Python コードや拡張モジュールをモジュール検索パス
中から探します。検索パスのデフォルト値は、インタプリタをビルドする
際に Python のバイナリ内に設定されます。検索パスは、
sys を import して、 sys.path
を出力すれば
わかります。
$ python Python 2.2 (#11, Oct 3 2002, 13:31:27) [GCC 2.96 20000731 (Red Hat Linux 7.3 2.96-112)] on linux2 Type ``help'', ``copyright'', ``credits'' or ``license'' for more information. >>> import sys >>> sys.path ['', '/usr/local/lib/python2.3', '/usr/local/lib/python2.3/plat-linux2', '/usr/local/lib/python2.3/lib-tk', '/usr/local/lib/python2.3/lib-dynload', '/usr/local/lib/python2.3/site-packages'] >>>
sys.path
内の空文字列は、現在の作業ディレクトリを表します。
ローカルでインストールされるパッケージは、.../site-packages/
ディレクトリに入るのが決まりですが、ユーザはどこか任意のディレクトリに
Python モジュールをインストールしたいと思うかもしれません。
例えば、自分のサイトでは、 web サーバに関連する全てのソフトウェア
を /www に置くという決まりがあるかもしれません。そこで、
アドオンの Python モジュールが /www/python 置かれることに
なると、モジュールを import するためにはディレクトリを sys.path
に追加せねばなりません。ディレクトリを検索パスに追加するには、いくつか
の異なる方法が存在します。
最も手軽な方法は、パス設定ファイルをすでに Python の検索パスに
含まれるディレクトリ、通常は .../site-packages/ ディレクトリ
に置くというものです。パス設定ファイルは拡張子が .pth で、
ファイルには sys.path
に追加するパスを一行に一つづつ
記述しなければなりません。
(新たなパスは今の sys.path
の後ろに追加されるので、追加された
ディレクトリ内にあるモジュールが標準のモジュールセットを上書き
することはありません。つまり、このメカニズムを使って、標準モジュール
に対する修正版のインストールはできないということです。)
パスは絶対パスでも相対パスでもよく、相対パスの場合には .pth ファイルのあるパスからの相対になります。検索パスにディレクトリが追加 されると、今度はそのディレクトリに対して .pth ファイルを 検索します。詳しくは site モジュールに関するドキュメント" > site モジュールに関するドキュメント を読んでください。
やや便利さには欠けますが、Python の標準ライブラリ中にある
site.py ファイルを編集することでも、sys.path
を変更
できます。site.py は、 -S スイッチを与えて
抑制しないかぎり、Python インタプリタが実行される際に自動的に import
されます。ただし、設定するには、単にsite.py を編集して、例えば
以下のような二行を加えます:
import sys sys.path.append('/www/python/')
また、sys.path
を修正できる二つの環境変数があります。
PYTHONHOME を使うと、インストールされている Python の
プレフィクスを別の値に設定できます。
例えば、 PYTHONHOME を "/www/python" に設定すると、
検索パスは
['', '/www/python/lib/python2.2/', '/www/python/lib/python2.3/plat-linux2', ...]
といった具合になります。
PYTHONPATH を使うと、sys.path
の先頭に一連の
パスを追加できます。例えば、PYTHONPATH を
"/www/python:/opt/py" に設定すると、検索パスは
['/www/python', '/opt/py']
から始まります。
(sys.path
にディレクトリを追加するには、そのディレクトリが
実在しなければなりません; site は実在しないディレクトリを
除去します。)
最後に、 sys.path
はただの普通の Python のリストなので、
どんな Python アプリケーションもエントリを追加したり除去したりと
いった修正を行えます。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。