トップ(最新) | <前

nDiki : PAR

PAR - Perl Archive Toolkit

Perl プログラムから実行形式 (Windows であれば exe 形式)ファイルを作成することのできる Perl モジュール

  • 実行形式を作成する機能
  • PAR ファイルとしてスクリプト、モジュールをアーカイブする機能
  • ネットワーク経由で PAR ファイルを取得する機能

などの機能がある。

PAR 0.970 から PARPAR-Packer に分離した。

簡単な使い方

hello.pl から hello.exe を作成する。

 pp -o hello.exe hello.pl

Tips

自分自身がPARでアーカイブしたものかどうかを調べる。

もし明示的に PAR モジュールを use していない場合、 $INC{'PAR.pm'} が真かどうかをチェックすることで判定できる。 真の場合はPARでアーカイブされたものであるので、PAR::read_file 等を実行してアーカイブの中のファイルにアクセスすることができる。

pp で作成した実行可能ファイルライセンスについて

The Artistic License の下にあるライブラリを使用しているだけであれば、第8条に従い任意のライセンスを設定できる。

(pp のマニュアルより)

関連情報

スポンサード リンク

Related term

2005年3月15日 (火)

PAR で作った実行可能ファイルを殺せない このエントリーを含むはてなブックマーク

PARWindows実行可能ファイル(exe)にしたプログラムを、別のプログラムから起動・終了させるプログラムを書いていたところ困った事態。

今まで気がつかなかったのだが、PARで作った実行可能ファイルを実行するとプロセスが起動される。片方がブートストラップで、もう一方がPerlインタプリタのようだ。

プログラムから起動した時に取得できるのはブートストラップの pid で、これを TerminateProcess してもPerlインタプリタの方は以前として動き続ける。 止める方法がわからん。

自爆機能とかつけて対処するしかないか。

@ --pidfile

結局 --pidfile オプションをつけて、pid をファイルに書き出せるようにした。 $$ の値はPerlインタプリタ側のプロセスIDで、こちらを kill するとまとめて落ちてくれる。

スポンサード リンク


[ 3月15日全て ]

2005年3月16日 (水)

wxPerl + PAR ではDLL追加指定の必要あり このエントリーを含むはてなブックマーク

メモPAR (0.87) では DLLが使用するDLLまでは自動的に検出できないので、明示的に指定する必要あり。

wxPerl だと Wx.dll 以外に wxmsw24.dll が必要になるので、pp の -l オプションで指定しなければならない。 この際見つからなくてもエラーにならないようだ。 見つからない場合はフルパスで指定しなければならない。

 $Config{sitelib} . "\\auto\\Wx\\wxmsw24.dll"; # with use Config;

あたりにあるはず。


[ 3月16日全て ]

2005年3月31日 (木)

Wineを入れてみる このエントリーを含むはてなブックマーク

Linux 上で Win32 用の ActivePerl を動かして、PPM パッケージの作成や PAR による実行可能ファイルの作成をできるようにしたい。

調べたところ Wine 上でも ActivePerl が動くらしい。 さっそく Debian GNU/Linuxsid 環境にインストールしてみる。

debパッケージは以下をインストール

  • wine
  • wine-utils
  • winesetuptk
  • wine-doc
  • msttcorefonts

winesetup を実行して ~/.wine 以下を作成。 winesetup が古いのか wine を実行すると

Please use the registry key HKEY_CURRENT_CONFIG\Software\Fonts\LogPixels to set the screen resolution and remove the "Resolution" entry in the config file

という警告がでるので、[fonts] の中の

 "Resolution" = "96"

をコメントアウト。

次に msi 形式になっている ActivePerl インストーラを動かすために、Windows Installerインストールする。

失敗。設定がうまくいっていないのか、何かが足りないのか。

usr/share/wine/wineinstall で ~/.wine 以下を作っても駄目。

要調査。


[ 3月31日全て ]

2006年2月9日 (木)

ActivePerlPAR PPM パッケージは合わせる必要あり このエントリーを含むはてなブックマーク

以前 ActivePerlインストールした PARWindows 実行形式ファイルに変換しておいたプログラムが実は動かなかった事に気がつく。

プログラム名 - エントリポイントが見つかりません。

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

おや。

どうやら ActivePerl 5.8.7 Build 813 上で、 ActivePerl 5.8.6 Build 811PPM パッケージ化しておいた PAR を使ったのがまずかったようだ。

ActivePerl は 5.8 系の間ではバイナリ互換だったと思うが(5.6系とは駄目)、PAR に限ってはそうはいかないらしい。まぁ、考えてみればそうなってもおかしくない。

ということで PAR PPM パッケージを作り直してインストールし、こちらであらためて exe ファイルを作成。 うまく動くようになったことを確認。


[ 2月9日全て ]

2006年6月16日 (金)

PAR に関する ActivePerlライセンス このエントリーを含むはてなブックマーク

確認したら ActivePerl Community License v2.1 (ActivePerl 5.8.8.817 はこれ) には PAR (や PerlAppPerl2Exe など) で ActivePerl に含まれているファイルをラッピングしてアプリケーションに含めることができると書いてあった (一部条件あり)。

今まで見落していたよ。

ActivePerl」 + 「The Artistic License 下な CPAN にあるモジュール」 + 「自作コード」を PAR でバイナリ化して配布しても OK ということが分ってちょっとすっきり。


[ 6月16日全て ]

2006年7月3日 (月)

自前 PPM リポジトリの管理 このエントリーを含むはてなブックマーク

Windows Perl アプリケーション用に PPM リポジトリを久しぶりに整理。

自分が使用する PPM パッケージは以下の理由から、以前より基本的に自前でビルド/保存し PPM リポジトリをローカルに作成するようにしている。

  1. 後でオフラインインストールできるようにする。
  2. 「公開リポジトリが無くなった」あるいは「公開リポジトリに欲しいパッケージが無くなった」時に困らないようにする。
  3. 動作確認された組み合わせでの PPM パッケージセットを作成・保持できるようにする。
  4. ライセンス的にクリアなものだけを含むリポジトリを用意する。 (芋蔓式インストールで、ライセンス的にクリアでないパッケージが入ってしまうのを防ぐ)。

@ 手元では以下のように管理

 PPM
  |-- <category>
  |   `-- 8xx
  |       |-- <projects A> [ 公開 / export ]
  |       |   |-- module1.ppd -> (A)
  |       |   |-- module1.tar.gz -> (B)
  |       |   `-- ...
  |       `-- ...
  `-- pool
      |-- module1-x.yy
      |   |-- module1.x.yy.tar.gz
      |   |-- some documents...
      |   `-- build817
      |       |-- module1.ppd (A)
      |       `-- module1.tar.gz (B)
      `-- ...
@ pool
  • pool ディレクトリに「[モジュール]-[バージョン]」ディレクトリを作成する。同じバージョンでも、異なるバージョンは両方とも別々にキープしておく。
  • その下にソース tarball を置く。
  • ライセンス情報ファイルなども置く (touch Perl-License 等空のファイルを作成しておく)
  • PPM パッケージPPM::Make で作成し、その時に使用した ActivePerlビルド番号別にサブディレクトリを作って .tar.gz と .ppd を置く。
@ リポジトリ
  • ActivePerlビルド番号別にリポジトリを作成する。基本的には 6xx 系、8xx 系それぞれの中ではバイナリ互換性がある (PAR などは、ビルド番号に1対1でしか互換性がない)。
  • 必要に応じてカテゴリ別サブディレクトリを用意 (アクセス制限の都合などにより)
  • 必要に応じてプロジェクト毎にサブディレクトリを用意 (プロジェクト毎にパッケージセットを作るため)
  • リポジトリディレクトリからは pool 内の .ppd、.tar.gz へシンボリックリンクを張る。欲しいモジュールのバージョン、ビルド番号を選んでリンクする。
@ 公開
  • SambaApache などで、PPM ディレクトリ全部あるいは特定のリポジトリ部分を公開する。
  • 必要なら export して別サーバに置く。rsync や cp の -L オプションでシンボリックリンクを実ファイルに置き換えてアーカイブを作成する。

[ 7月3日全て ]

2006年12月12日 (火)

PAR::Repositoryビルド済み Perl モジュールをネットワーク配信 このエントリーを含むはてなブックマーク

@ 実行可能ファイル作成としての PAR

PAR といえば Perl スクリプトを実行可能ファイル(Windows なら EXE 形式ファイル)に変換するモジュールとして有名である。

ちなみに実行可能ファイルを作成する部分はは PAR 0.97 より PAR-Packer パッケージに分けられ、PAR 自体はインストールしやすい pure Perl なパッケージになっている。

@ PAR モジュールアーカイブからのローダとしての PAR

PAR が提供するもう一つの(こちらが本来はメイン?)機能は、プログラムの実行時に必要な Perl モジュールPAR ファイルと呼ばれる Perl モジュールアーカイブファイルからロードする機能である。 XS モジュールなどもコンパイルすることができるどこかの環境で1度ビルドして PAR ファイルにしておけば、同じアーキテクチャのホスト上でそのまま利用することができる。

@ PAR リポジトリ

ロードしたい PAR ファイルはファイルパスだけではなく URL でも指定することができ、必要な時にオンデマンドでフェッチさせることができる。 これを使えば Perl プログラムの集中管理可能だ。

PAR 0.951 からは PAR リポジトリというコンセプトが追加され、パッケージ毎に作った PAR ファイルをサーバ上(あるいはローカル)のリポジトリに蓄積してオンデマンドでロードできるようになった。

個別に PAR ファイルを指定する従来の方式に比べてかなり便利そうである。 ということで試用してみた。

まずは

あたりをインストールし準備 OK。

@ 1. PAR リポジトリを作成する

最初に PAR-Repository に含まれている parrepo で。

 parrepo create -r /tmp/PAR

PAR リポジトリファイルの中にはデータベースファイルが作成されるが、これは DBM::Deep というアーキテクチャ非依存のものを使っているので、Linux でも Windows でもどちらからでもアクセス可能である (つまり Linux 上でリポジトリをメンテできるということだ)。

@ 2. Perl パッケージを PAR ファイル化する

次に必要な PAR ファイルを作成する。 作成したいパッケージを展開してビルドし、blib ができている状態で PAR::Dist を使ってパッケージ化する。

 perl Makefile.PL
 make
 make test
 perl -MPAR::Dist -e blib_to_par

例えば ActivePerl*1 上で WWW-Mechanize-1.20 を PAR ファイル化すると

 WWW-Mechanize-1.20-MSWin32-x86-multi-thread-5.8.8.par

というファイルが作成される。

普段から ActivePerl で必要なライブラリは基本的に自前で PPM パッケージ化して、動作確認した上で PPM リポジトリに蓄積するようにしているので、合わせて次の手順でパッケージを作ることになる。

 perl Makefile.PL
 nmake
 nmake test
 perl -MPAR::Dist -e blib_to_par
 make_ppm

*1ここでは Windows 上の

@ 3. PAR リポジトリPAR ファイルを登録する

PAR ファイルができたら parrepo でリポジトリに登録する。

 parrepo inject -r /tmp/PAR -f xxx.par

@ 4. PAR リポジトリ上のライブラリを使用してみる

例えば先ほどの WWW::Mechanize がリポジトリに登録されている状態で

 #!/usr/bin/perl
 use PAR { repository => 'file:///tmp/PAR/' };
 use WWW::Mechanize;
 my $mech = WWW::Mechanize->new;
 $mech->get('http://www.example.com');
 print $mech->content;

というスクリプトを書いて実行すると、PAR リポジトリから WWW::Mechanize がロードされて正しく実行される。

ここでリポジトリを Web サーバアップロードして、repository のところに URL を指定するようにすることもできる。 例えばリポジトリを http://www.example.com/PAR/ に配置したとすると

 #!/usr/bin/perl
 use PAR { repository => 'http://www.example.com/PAR/' };
 use WWW::Mechanize;
 my $mech = WWW::Mechanize->new;
 $mech->get('http://www.example.com');
 print $mech->content;

と書き換えることで、インストールしていない WWW::Mechanize を使用できるようになる。

@ Perl プログラムを実行形式化する

先ほどの Perl スクリプトを get_top_page.pl という名前で保存して pp で実行可能ファイル化する。

 pp -o get_top_page.exe -M PAR::Repository::Client get_top_page.pl

とすれば get_top_page.exe という実行可能ファイルが作成される。 WWW::Mechanize はオンデマンドで http://www.example.com/PAR/ からフェッチされるので、アップデートが必要な場合は新しい PAR ファイルを作成してリポジトリを更新するだけでよい。 EXE ファイルを作成しなおして利用者に配付しなすといった作業も不要だ。

@ スクリプトもリポジトリにおく

さらには実行するスクリプトをも PAR リポジトリに置いておくことが可能だ。

例えば WWW-Mechanize に含まれている mech-dump をオンデマンドにフェッチして実行する実行形式ファイルは以下のコマンドで作成できる。

 pp -o mech-dump.exe -M PAR::Repository::Client \
   -e "use PAR { repository => 'http://www.example.com/PAR/', \
                 run => 'mech-dump' }"

@ まとめ

ActivePerl では PPM があるとはいえ、普通のユーザにちょっとしたプログラムを使ってもらうのに「ActivePerlインストールして、PPM パッケージインストールして、……」というのは手間すぎる。

pp で プログラムに必要なものを全てバンドルした実行形式化ファイルにするという方法ももちろんあるのだが、頻繁にアップデートするようなスクリプトの場合には、起動のための部分だけ pp で作成しておいてあとは PAR リポジトリで集中管理するというのもちょっと魅力的である。


[ 12月12日全て ]

2008年2月21日 (木)

今日のさえずり - 4C-0.4 芯って予想以上に細い このエントリーを含むはてなブックマーク

@ 2008年02月20日

@ 2008年02月21日

  • 00:07 P3 を 2.37 から 2.50 に上げて久しぶりに起動。しばらく見ない間にさらに改良されている。
  • 00:10 @lynmock Linux ユーザとしては設定ファイルが ~/.P3_PeraPeraPrv に入ったのが嬉しいですね。
  • 10:12 4C-0.4 芯って予想以上に細い。滲みがないからハイテックCより細い字が書けるな。ただ髭が出る。
  • 12:10 久しぶりに SquidRed Hat Linux 8.0 BOX に Squid 2.6 をソースからインストール。すんなりはいった。
  • 12:32 アトレ大井町、今日は休館日か。
  • 17:19 先週の金曜日にかっちゃんが死んだので、明日のタッチは見逃せない (TOKYO MX)。
  • 19:45 SO905iCSiアプリモバイル Google マップダウンロードできるようになった。現在位置取得も OK。[mb]
  • 22:30 3日前にケータイ保障 お届けサービス申し込んだので、ドコモプレミアムクラブガイドブックが郵送されてきた。

[ 2月21日全て ]

2009年2月22日 (日)

ActivePerl 5.8.9 build 825 + MinGW 5.1.4 + PARPerl スクリプトを実行可能ファイル このエントリーを含むはてなブックマーク

久しぶりに PAR の出番。 休日出勤して環境作り。

今回実行可能ファイルにしたい Perl プログラムが Perl 5.8 で開発・テストされているものの改訂版で、必要な PPM パッケージも 8xx 用に作りだめしてあるので、ActivePerl 5.8.9.825 上で行うことにした。

PAR::Packer は ActivePerl の build と合っていないとうまく動かないので、自分でソースからビルドして PPM パッケージ化する。 必要な依存モジュールのバージョンも軒並み上がっているので、それらもビルド

今まで Visual Studio 6.0 でビルドしていたのだけれど、この間 PC をかえてから入れていなかったので、今回は MinGW を使うことにした。 SourceForge.net 上から g++ をダウンロードしてネットワークインストールできないようなので、そこだけ SourceForge.JP で探してきてインストール

MinGW の bin ディレクトリを PATH に追加したら、特に問題なく Perl モジュールコンパイルできている。素晴しい。ExtUtils::FakeConfig 無くてもいいのかな。


[ 2月22日全て ]

2009年2月23日 (月)

今日のさえずり - くるみマフィンの賞味期限が2月30日 このエントリーを含むはてなブックマーク

@ 2009年02月21日

  • 11:49 YouTube 見てたら Linux フリーズした。 *P3
  • 11:53 リラックマストア東京駅店、昨日オープンか。 *P3
  • 13:42 西安餃子の半個室。 [mb]
  • 14:49 ズボン濡らしたのでイトーヨーカドーで新しいの買って着替え。 [mb]
  • 18:50 今日買ったくるみマフィンの賞味期限が2月30日だった。で、ハリマヤさんいったい賞味期限はいつなの? [mb]
  • 20:34 昼のエビチリ、2度辛いがきたっぽい。 *P3

@ 2009年02月22日

  • 09:47 シェーキーズってまだあるんだ。最後にランチの食べ放題食べたのいつだろう。もう今行っても、もとを取れないだろうけど久々に食べたい。 [mb]
  • 09:55 @nakameP えーっ、シェーキーズってそんなに進化してたんですか。最後に行ったのは15年以上前かなあ。学生にはあのチープ感でも満足でした。 [mb]
  • 10:25 出社。 *P3
  • 10:53 JUDE/Server 2010年2月末日をもってバージョンアップ終了か。需要少なかったのかなあ。 *P3
  • 11:41 メモ用にと名刺入れに名刺サイズ方眼情報カードをずっと忍ばせていたんだけれど、基本 RHODIA 持ち歩く習慣がついているので使ったためしがない。かさばるだけなので捨てる。 *P3
  • 14:43 MinGW 5.1.4 インストール。 *P3
  • 15:41 SourceForge.net から MinGW の g++ がダウンロードできないので、そこだけ SourceForge.JP から取ってきてようやくはいった。 *P3
  • 17:45 PAR-Packer の nmake test をかけると、Norton Internet Security がしゃしゃり出てくる。 *P3
  • 18:11 ようやく PAR-Packer の nmake test が終わった。 *P3
  • 19:12 斜め向かいのちょっとバーコード始まっているおじさんがポータブル MD プレーヤーの外付けバッテリのネジにずっと苦戦している。カチャカチャ。 [mb]
  • 22:53 目が尋常なく痒い。 *P3

@ 2009年02月23日

  • 12:59 PAR における DLL ファイルのファイル名の大文字小文字問題に翻弄されていた。 *P3
  • 13:02 PDL 今もきちんとバージョンアップしているんだな。ちょっと安心。 *P3
  • 19:02 納期間近の仕事集中的にやっていたけれど、そろそろルーチンワークもやっておかないとヤバい。 *P3
  • 20:27 さて帰る。 *P3
  • 20:44 切ない……。会社にマスク忘れてきた。 [mb]
  • 20:53 モバツイ不調なので久しぶりに PC2M 経由で本家。
  • 21:38 そろそろ RPG のアイテムに花粉症が出てきてもいい頃。 *P3

PARDLL ファイルをロードできなかったら大文字小文字を疑え このエントリーを含むはてなブックマーク

PDL を使っている Perl プログラムを、昨日構築した今ごろの環境で PAR を使って実行可能ファイル化したんだけれども、実行してみたら

 Can't locate loadable object for module PDL::Core in @INC ...

というエラー。 実行時のキャッシュディレクトリを見ると core.dll が同梱されていない模様。 なんでだー。

いろいろやってみたところ、もしやと思ってインストール済みの core.dll を Core.dll という名前に変えたらエラーが出なくなった(正確には次のモジュールで同様のエラーが出た)。

ファイル名の大文字・小文字が問題だったらしい。 PARFAQ には「Win32::Perms の Perms.DLL でこのエラーが出たら、Perms.dll にしてね」と書かれている。 最初これ拡張子の問題だけだと思っていた。 ベース名でも同様のようだ。

以前は問題なかったから、比較的新しい PAR で発生するようになったと思われる。 これ絶対はまる。


[ 2月23日全て ]

スポンサード リンク

■よく検索されるキーワード

torrent(113) perl(50) 書き方(41) アジェンダ(33) ドラマ(27) linux(27) 動画(24) windows(24) 提案書(22) debian(20) 冷蔵庫(18) 使い方(17) アジェンダとは(16) evernote(16) firefox(15) 画像(14) x31(14) twitter(14) java(14) usb(12) gmail(11) dropbox(11) winmerge(11) tc-1(10) tickler(10) 映画(10) 修理(10) naneyorgwiki(9) thinkpad(9) ダウンロード(9) テンプレート(9) ixy(9) lsyncd(9) nikon(9) ノート(8) svn(8) rcs(8) フリー(8) 生年月日(8) 壁紙(8) apache(8) wiki(8) インストール(7) うなぎ(7) ダイソー(7) 210(7) smtp(7) サンプル(7) 女優(7) 提案書の書き方(7) a6(7) file(7) iwgp(7) ganttproject(7) aniara(7) 写真(7) 01(6) web(6) 補助充電アダプタ(6) grub(6) cm(6) ssh(6) boblbe-e(6) モジュール(6) 無料(6) フルハルター(6) visual(6) トレント(6) ヨドバシ(6) hyde(6) 評判(6) 無料動画(6) 会議(6) ブログ(6) c++(6) 作り方(6) foma(6) skype(5) ボールペン(5) c#(5)

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 0.120765s / load averages: 0.21, 0.29, 0.31
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)