3 Windows インストーラを作成する

実行可能なインストーラは、Windows 環境ではごく自然なバイナリ配布形式 です。インストーラは結構なグラフィカルユーザインタフェースを表示して、 モジュール配布物に関するいくつかの情報を setup スクリプト内のメタデータ から取り出して示し、ユーザがいくつかのオプションを選んだり、インストール を決行するか取りやめるか選んだりできるようにします。

メタデータは setup スクリプトから取り出されるので、Windows インストーラ の作成は至って簡単で、以下を実行するだけです:

python setup.py bdist_wininst

あるいは、bdist コマンドを --formats オプション付きで実行します:

python setup.py bdist --formats=wininst

(pure Python モジュールとパッケージだけの入った) pure モジュール 配布物の場合、作成されるインストーラは実行バージョンに依存しない 形式になり、 foo-1.0.win32.exe のような名前になります。 pure モジュールの Windows インストーラは Unix や Mac OS といったプラットフォームでも作成できます。

非 pure 配布物の場合、拡張モジュールは Windows プラットフォーム上 だけで作成でき、Python のバージョンに依存したインストーラになります。 インストーラのファイル名もバージョン依存性を反映して、 foo-1.0.win32-py2.0.exe のような形式になります。 従って、サポートしたい全てのバージョンの Python に対して、 別々のインストーラを作成しなければなりません。

インストーラは、ターゲットとなるシステムにインストールを実行 した後、 pure モジュールを通常 (normal) モードと最適化 (optimizing) モードでコンパイルしようと試みます。何らかの理由があってコンパイル させたくなければ、bdist_wininst コマンドを --no-target-compile かつ/または --no-target-optimize オプション付きで実行します。

デフォルトでは、インストーラは実行時にクールな ``Python Powered'' ロゴを表示しますが、自作のビットマップ画像も指定できます。 画像は Windows の .bmp ファイル形式でなくてはならず、 --bitmap オプションで指定します。

インストーラを起動すると、デスクトップの背景ウィンドウ上にでっかい タイトルも表示します。タイトルは配布物の名前とバージョン番号から 作成します。--title オプションを使えば、 タイトルを別のテキストに変更できます。

インストーラファイルは ``配布物ディレクトリ (distribution directory)'' -- 通常は dist/ に作成されますが、--dist-dir オプションで指定することもできます。


3.1 インストール後実行スクリプト (postinstallation script)

Python 2.3 からは、インストール実行後スクリプトを --install-script オプションで指定できるように なりました。スクリプトはディレクトリを含まないベースネーム (basename) で指定しなければならず、スクリプトファイル名は setup 関数の scripts 引数中に挙げられていなければなりません。

指定したスクリプトは、インストール時、ターゲットとなるシステム上で 全てのファイルがコピーされた後に実行されます。このとき argv[1]-install に設定します。また、アンインストール時には、 ファイルを削除する前に argv[1]-remove に設定して 実行します。

Windows インストーラでは、インストールスクリプトは埋め込みで実行 され、全ての出力 (sys.stdoutsys.stderr) はバッファにリダイレクト され、スクリプトの終了後に GUI 上に表示されます。

インストールスクリプトでは、インストール/アンインストール のコンテキストで特に有用ないくつかの機能を、追加の組み込み関数として利 用することができます。

directory_created( path)
file_created( path)
これらの関数は、インストール後実行スクリプトがディレクトリやファイル を作成した際に呼び出さなければなりません。この関数はアンインストーラ に作成されたpathを登録し、配布物をアンインストールする際にファイルが 消されるようにします。安全を期すために、ディレクトリは空の時にのみ 削除されます。

get_special_folder_path( csidl_string)
この関数は、「スタートメニュー」や「デスクトップ」といった、 Windows における特殊なフォルダ位置を取得する際に使えます。 この関数はフォルダのフルパスを返します。 csidl_string は 以下の文字列のいずれかでなければなりません:

"CSIDL_APPDATA"

"CSIDL_COMMON_STARTMENU"
"CSIDL_STARTMENU"

"CSIDL_COMMON_DESKTOPDIRECTORY"
"CSIDL_DESKTOPDIRECTORY"

"CSIDL_COMMON_STARTUP"
"CSIDL_STARTUP"

"CSIDL_COMMON_PROGRAMS"
"CSIDL_PROGRAMS"

"CSIDL_FONTS"

該当するフォルダを取得できなかった場合、 OSError が送出されます。

どの種類のフォルダを取得できるかは、特定の Windows のバージョン ごとに異なります。また、おそらく設定によっても異なるでしょう。 詳細については、 SHGetSpecialFolderPath() 関数に関する Microsoft の ドキュメントを参照してください。

create_shortcut( target, description, filename[, arguments[, workdir[, iconpath[, iconindex]]]])

この関数はショートカットを作成します。 target はショートカットによって起動されるプログラムへのパスです。 description はショートカットに対する説明です。 filename はユーザから見えるショートカットの名前です。 コマンドライン引数があれば、arguments に指定します。 workdir はプログラムの作業ディレクトリです。 iconpath はショートカットのためのアイコンが入ったファイルで、 iconindex はファイル iconpath 中のアイコンへのインデクス です。これについても、詳しくはIShellLink インタフェースに 関する Microsoft の ドキュメントを参照してください。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。