Top > PARによるPerlスクリプトのEXE化

[注]以下の文書は PAR-0.959 を基に書かれていますが,Version 0.970 以降の PAR では,pp コマンドが同梱されておらず,以下に述べられている方法ではインストールがうまくいきません。最新版の PAR で成功するインストール方法は,現在調査中です。

PARによるPerlスクリプトのEXE化

0. はじめに

Perl スクリプトを,PAR によって,Windows で単独実行可能な EXE ファイルに変換する方法を記します。

ひとまず,インストール方法と使い方の説明を行い,その操作の意味は後半で解説します。

1. 準備

前提条件

まず,以下がインストールされていて,実行ファイルにパスが通っていることを前提とします。

MinGW のインストール方法に関しては, C-Compiler Wiki - MinGW/インストール を参照。

nmake.exe の入手先は, .NET Framework SDK や, Windows Platform SDK や, 自己解凍書庫の nmake15.exe など。

wget, unzip, tar, cp コマンドは,Cygwin がインストールされていれば,Cygwin のものを利用すればよいです。

Cygwin をインストールしていない場合

wget コマンドに関しては,Windows用wget の wget.exe を使用すればOK.

unzip コマンドに関しては, unzip.exeの実行ファイル をダウンロードすればOK.

tar コマンドに関しては,texinst755.zip に含まれる tar.exe を利用すればOK.

cp コマンドに関しては,

@echo off
copy %*

というバッチファイルを cp.bat という名前で保存して使えばOK.
(Windows2000/XP系のcmd.exeでは,%* でコマンドライン引数を全て渡せることを利用。9x系なら, 最大9個までになりますが, %1 %2 %3 %4 %5 %6 %7 %8 %9 と列挙すればOK.)

2. 最新バージョンの確認

CPANにおいて,ExtUtils::FakeConfig および PAR の最新版を確認します。
2006/11/17現在, ExtUtils-FakeConfig-0.08 および PAR-0.959 が最新です。

3. インストール

次の内容のバッチファイルを作成し,保存します。
ただし,2行目,3行目の,ExtUtils::FakeConfig および PAR のバージョンの部分は, 実行時の最新バージョンの数値に直しておいてください。

このバッチファイルを実行すると,まずPARの実行に必要なライブラリをインストールして,次に ExtUtils::FakeConfig および PAR の最新版のソースコードをダウンロードし,コンパイルしてインストールする作業を全自動で行います。

@echo off
set ExtUtils-FakeConfig-Archive=ExtUtils-FakeConfig-0.08
set PAR-Archive=PAR-0.959

rem レポジトリに bribes が登録されていない場合は新規登録
set ADDBRIBES=0
call ppm3 rep | find "bribes" || call ppm3 rep add bribes http://www.bribes.org/perl/ppm && set ADDBRIBES=1

rem bribes の優先順位が低い場合は上げる
set UPBRIBES_A=0
call ppm3 rep | find "[1] bribes" || call ppm3 rep up bribes && set UPBRIBES_A=1
set UPBRIBES_B=0
call ppm3 rep | find "[1] bribes" || call ppm3 rep up bribes && set UPBRIBES_B=1

call ppm3 install File-Temp
call ppm3 install Compress-Zlib
call ppm3 upgrade Compress-Zlib -install -precious
call ppm3 install Archive-Zip
call ppm3 install Module-ScanDeps
call ppm3 install PAR-Dist
call ppm3 install Parse-Binary
call ppm3 install Win32-Exe
call ppm3 install Digest-SHA
call ppm3 install Module-Signature

rem 設定変更した項目を元に戻す
if %UPBRIBES_B%==1 call ppm3 rep down bribes
if %UPBRIBES_A%==1 call ppm3 rep down bribes
if %ADDBRIBES%==1 call ppm3 rep del bribes

rem FakeConfigのソースコードを取得してコンパイル・インストール
pushd .
dir %ExtUtils-FakeConfig-Archive%.zip || wget http://search.cpan.org/CPAN/authors/id/M/MB/MBARBON/%ExtUtils-FakeConfig-Archive%.zip
unzip %ExtUtils-FakeConfig-Archive%.zip
cd %ExtUtils-FakeConfig-Archive%
perl Makefile.PL
nmake
nmake install
popd

rem PARのソースコードを取得してコンパイル・インストール
pushd .
dir %PAR-Archive%.tar.gz || wget http://search.cpan.org/CPAN/authors/id/S/SM/SMUELLER/%PAR-Archive%.tar.gz
tar zxvf %PAR-Archive%.tar.gz
cd %PAR-Archive%
perl -MConfig_m Makefile.PL
nmake
nmake install
popd

4. 使用法

基本的な使用例

pp -o hoge.exe hege.pl

こうしてできる hoge.exe は,実は zip ファイルです。 拡張子を .zip に変更すれば解凍できますので,ソースコードの隠蔽目的には使えません。

この hoge.exe は,必要なライブラリおよびインタプリタを含んでいるので,ActivePerl がインストール されていない環境でもクリック一発で実行できます。
ただし実行時にまず大きなzipを裏で展開するためか,起動時にCPUパワーを食い,やや時間がかかりますが, それは仕方がないでしょう。

実行時に黒いコマンドプロンプトのウィンドウを出さないようにする

pp --gui -o hoge.exe hege.pl

.exeファイルのアイコンを指定する

pp -i hoge.ico -o hoge.exe hege.pl

データファイルをひっくるめる

pp -a data.txt -o hoge.exe hege.pl

自動検出失敗時に,使うモジュールを手動指定する

pp -M Net::SMTP -o hoge.exe hege.pl

ヘルプを表示する

pp -h

※ -more- は [enter] → [space] で一画面進む

5. インストール方法の仕組みの解説

バッチファイル前半部では,まず,bribes のレポジトリから,PARに必要なライブラリをインストールしています。cmd.exeのコマンドセパレータ A || B (Aが失敗したらBを実行),A && B (Aが成功したらBを実行) を使用しています。途中に行った設定変更は,環境変数で管理して,元に戻しておきます。

さて,参考サイト[1][2]にも書かれている通り, ppmでレポジトリからインストールできるPARのパッケージや,PARの配布サイトに置いてある Windows用にコンパイルされたPARのバイナリパッケージは,ActivePerl の最新版に対応していません。

そのため,パッケージを使ったPerlスクリプトをEXE化して実行すると,実行時に

プロシージャエントリポイントPL_memory_wrapがダイナミックリンクライブラリperl58.dllから見つかりませんでした。

というエラーが出てしまいます。

そこで,参考サイト[2]にあるとおり,CPANから最新版の PAR のソースコード をダウンロードし,それをMinGWでコンパイルして使用したいわけです。

しかし,CPANのモジュールはUNIX用に作られているので,まず,CPANのモジュールをMinGWでコンパイルできるようにしておかなければなりません。そのために使用するのが ExtUtils::FakeConfig です。

参考サイト[3]にあるとおり,ExtUtils::FakeConfig をインストールすれば,本来

perl Makefile.PL

とするところを,

perl -MConfig_m Makefile.PL

として,あとは普通に

nmake
nmake install

とすれば,CPAN のモジュールを MinGW でコンパイルしてインストールすることができます。

バッチファイル中盤では,ExtUtils::FakeConfig のソースコードをCPANからダウンロードし,MinGWでコンパイルしてインストールしています。

そして,バッチファイルの終盤では,PAR のソースコードをCPANからダウンロードし, 先程の ExtUtils::FakeConfig を使って MinGW でコンパイルしてインストールしています。

これで,めでたく最新版の ActivePerl で PAR が使えるようになる,というわけです。

6. その他のEXE化ツール

PerlスクリプトをEXEに変換するツールは,PARだけではなく,他にもあります。 参考サイト[4][5]に比較があります。

7. 参考サイト


[ページの先頭へ]  [トップページへ戻る]