しばしば、サードパーティ製 Python モジュールをインストールするための 標準の場所以外にモジュールをインストールしなければならなかったり、 単にそうしたくなるときがあります。例えばUnix システムでは、標準のサード パーティ製モジュールディレクトリに対する書き込み権限を持っていないかも しれません。または、あるモジュールを、ローカルで使っている Python に 標準のモジュールの一部として組み込む前にテストしてみたいと思う かもしれません。既存の配布物をアップグレードする際には特にそうでしょう: 実際にアップグレードする前に、既存のスクリプトの基本となる部分が 新たなバージョンでも動作するか確認したいはずです。
Distutils の install
コマンドは、別の場所へ配布物をインストール
する作業を単純で苦労のない作業にするように設計されています。
基本的なアイデアは、インストール先のベースディレクトリを指定しておき、
install
コマンドがそのベースディレクトリ下にファイル群を
インストールするための一連のディレクトリ (インストールスキーム
: installation scheme) を作成するというものです。
詳細はプラットフォームによって異なるので、以下の節から自分の
プラットフォームに当てはまるものを読んでください。
``home スキーム'' の背後にある考え方は、Python モジュールを 個人用のモジュール置き場でビルドし、維持するというものです。 このスキームの名前は Unixの「ホーム」ディレクトリの概念から とりました。というのも、 Unixのユーザにとって、自分のホーム ディレクトリを/usr/ や /usr/local/ のようにレイアウト するのはよくあることだからです。とはいえ、このスキームはどの オペレーティングシステムのユーザでも使えます。 新たなモジュールのインストールは単純で、
python setup.py install --home=<dir>
~
) をタイプするだけでかまいません;
install
コマンドがチルダをホームディレクトリに
展開してくれます:
python setup.py install --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でしかサポートされて いませんでした
あるインストール済みの 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 の場所すら 指していなければどうにもなりません。)
Windows はユーザのホームディレクトリという概念がなく、 Windows 環境下で標準的にインストールされた Python は Unixよりも 単純な構成をしているので、 Windows で追加のパッケージを別の場所に入れる 場合には、伝統的に --prefix が使われてきました。
python setup.py install --prefix="\Temp\Python"
インストールベースディレクトリは、 --prefix オプション だけで決まります; --exec-prefix オプションは、Windows ではサポートされていません。ファイルは以下のような構成でインストール されます:
ファイルの種類 | インストール先ディレクトリ | オーバライドするためのオプション |
---|---|---|
pure モジュール配布物 | prefix | --install-purelib |
非 pure モジュール配布物 | prefix | --install-platlib |
スクリプト | prefix\Scripts | --install-scripts |
データ | prefix\Data | --install-data |
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。