Perl-もう一度デプロイについて

Perl-もう一度デプロイについて



Perlはスクリプト言語であり、プロセッサで直接実行できるマシンコードにコンパイルできません。 これにより、アプリケーションをエンドユーザーのコンピューターに展開する際に問題が発生します。 アプリケーションにCPANモジュールが存在すると、この問題はさらに悪化します。モジュールを任意のシステムで動作させることが問題になる場合があります。



この問題を解決するには、3つのアプローチがあります。



-エンドユーザーコンピューターへのPerlのインストール、アプリケーションの依存関係のインストール(通常はインストールスクリプトを使用);

-PAR、Perl2exe、ActiveState PDKなどのツールの使用。アプリケーション、そのモジュール、およびperlインタープリター自体を別のマシンで実行できる自己完結型のexeファイルにパッケージ化します。

-最初の2つの方法の妥協点-PARを使用して依存関係のリストを作成し、アプリケーションとその依存関係(スクリプトとライブラリを含むフォルダー)からディストリビューションを作成します。 後者は、アーカイブ、たとえばNullSoft Installerに基づくインストーラーの形で配布できます。



最初の方法は明らかで、2番目の方法はインターネット上でかなりよく描かれています。 同時に、どちらにもデプロイメントの複雑さ(最初の方法)と非常に遅いアプリケーションの起動(方法2)という形で欠点があります。 これらの欠点の両方により、インターネットで十分にカバーされていない3番目の方法について真剣に考えさせられました。



例として、Tkを使用する単純なGUIユーティリティを作成して、任意のWindowsマシンで実行でき、Perlをインストールする必要がないようにします。



1.開発マシンにPerlをインストールする


Windows用のディストリビューションの中で最良の選択はStrawberry Perlです。これはCコンパイラーが付属しているため、CPANモジュールのかなりの部分を構築できるためです。 推奨バージョンは5.16です。



2.必要なモジュールのインストール


コマンドラインからcpanを実行し、必要なモジュールをインストールします。 私たちの場合、これらはTkとPar :: Packerです。 Tkモジュールは簡単にインストールでき、通常は問題ありません。



install Tk
      
      







残念ながら、このバージョンのPAR :: Packerにはエラーがあり、ほとんどのシステムではビルドされていません。 次のようにインストールする必要があります。



 install PAR::Packer
      
      







次のようなエラーが表示されます。



 windres -F pei-i386 -i winres\pp.rc -o winres\pp.res windres -o ppresource.coff winres\pp.res windres: unexpected version string length 68 != 32 + 8 dmake: Error code 129, while making 'ppresource.coff' dmake.exe: Error code 255, while making 'subdirs' RSCHUPP/PAR-Packer-1.013.tar.gz C:\strawberry\c\bin\dmake.exe -- NOT OK
      
      







モジュールをインストールするには、ディレクトリC:\ strawberry \ cpan \ build \に移動し、そこにPAR-Packer-1.013-29nhQPという形式のディレクトリが表示されます。 Par :: Packerモジュールのアンパックされたコードが含まれています。アセンブリを成功させるために修正を行います。 \ myldr \ winresサブディレクトリに移動し、pp.rc。ファイルを開きます 元の形式では、ファイルの内容は次のとおりです。



 // pp.RES is created using Microsoft toolchain rc // // rc pp.rc #define PP_MANIFEST_FILEFLAGS 0 #include <windows.h> CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "pp.manifest" VS_VERSION_INFO VERSIONINFO FILEVERSION 0,0,0,0 PRODUCTVERSION 0,0,0,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS PP_MANIFEST_FILEFLAGS FILEOS VOS_NT_WINDOWS32 FILETYPE VFT_APP FILESUBTYPE VFT2_UNKNOWN BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "000004B0" BEGIN VALUE "CompanyName", " \0" VALUE "FileDescription", " \0" VALUE "FileVersion", "0.0.0.0\0" VALUE "InternalName", " \0" VALUE "LegalCopyright", " \0" VALUE "LegalTrademarks", " \0" VALUE "OriginalFilename", " \0" VALUE "ProductName", " \0" VALUE "ProductVersion", "0.0.0.0\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x00, 0x04B0 END END WINEXE ICON pp.ico
      
      







ファイルが次のようになるように、余分な行を削除します。



 // pp.RES is created using Microsoft toolchain rc // // rc pp.rc #define PP_MANIFEST_FILEFLAGS 0 #include <windows.h> CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "pp.manifest"
      
      







PAR-Packer-1.013-29nhQPディレクトリに戻り、そこでコマンドを実行します。



 dmake dmake install
      
      







これでモジュールがインストールされ、アプリケーション配布パッケージの作成に進むことができます。



3.アプリケーション配布の作成


例として、次の簡単なHello worldプログラムを取り上げます。



 use Tk; use utf8; my $mw = new MainWindow; my $label = $mw -> Label(-text=>"") -> pack(); my $button = $mw -> Button(-text => "", -command => sub { exit }) -> pack(); MainLoop;
      
      







次に、依存関係とともにスクリプトを実行します。

 pp -B -p test.pl
      
      







その結果、a.parファイルを取得します。 実際、これはスクリプトと依存関係が存在する通常のZIPアーカイブです。 アーカイブにはlibフォルダーのみが必要です。たとえば、C:\ testapp \に解凍します。 そこでtest.plスクリプトをコピーします。 ここで、perlインタープリターと必要なdllをコピーして、このフォルダーに実行する必要があります。 これを行うには、C:\ strawberry \ perl \ binディレクトリから次のファイルをコピーします。



libgcc_s_sjlj-1.dll

libstdc ++-6.dll

perl.exe

perl516.dll



そのため、次の内容のディレクトリを取得する必要があります。

 12.08.2012 23:06 <DIR> lib 11.04.2012 19:23 96 256 libgcc_s_sjlj-1.dll 11.04.2012 19:23 829 440 libstdc++-6.dll 09.08.2012 10:04 16 384 perl.exe 09.08.2012 10:04 16 384 wperl.exe 09.08.2012 10:04 1 458 176 perl516.dll 12.08.2012 23:05 256 test.pl
      
      







最後の仕上げだけが残っています-依存関係のリストをコンパイルする際にppユーティリティはPARモジュール自体を考慮しないため、PARモジュール自体をディストリビューションに追加する必要があります。 これを行うには、次のオブジェクトをC:\ strawberry \ perl \ vendor \ libディレクトリからC:\ testapp \ libディレクトリにコピーします。



 12.08.2012 19:57 <DIR> PAR 02.12.2011 14:15 39 863 PAR.pm
      
      







これで、C:\ testapp \ディレクトリにすぐに実行できるアプリケーションができました。 実験の純度のために、マシンにインストールされたイチゴperlとそのライブラリがアプリケーションの起動に参加できないことを確認してください。 これを行うには、ディレクトリの名前をC:\ strawberryからC:\ strawberry_hideに変更します。 これで、C:\ testappディレクトリに移動し、次のコマンドを使用してアプリケーションを起動できます。



 perl test.pl
      
      







4.まとめ


アプリケーションにディレクトリを取得しました。このディレクトリは、簡単なコピーを使用して他のシステムに転送できます。 必要に応じて、インストーラーを作成するか、アーカイブでアプリケーションを配布できます。 Netbiosを介した共有フォルダーからのリモート実行はお勧めしません-ダウンロード速度が非常に遅いです。



アプリケーションを便利に実行するには、スクリプト形式のパラメーターを使用して、perl.exe(または、起動時にコンソールウィンドウを表示しない場合はwperl.exe)のショートカットを作成します。 これで、ショートカットをデスクトップに持ってくるだけで、プログラムを使用する準備が整いました。



All Articles