モジュールを失わずに Windows で Perl を更新するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/117481

質問

仕事では Windows で Perl 5.8.0 を使用しています。

初めて Perl をインストールしたとき、CPAN に移動し、すべてのソースをダウンロードし、いくつかの変更を加えました (.MAK ファイルに?スレッドなどをサポートするため)、nmake / nmake test / nmake install を実行しました。その後、少しずつ CPAN から個々のモジュールをダウンロードし、nmake ダンスを実行しました。

したがって、より新しいバージョンにアップグレードしたいのですが、新しいバージョンは既存のスクリプトを壊してはなりません。特に、私がインストールした多数の「使用」モジュールは、新しいバージョンにもインストールする必要があります。

現在のバージョンを更新し、nmake dance で行ったことすべてが更新後も確実に残るようにする最も信頼できる (そして簡単な) 方法は何ですか?

役に立ちましたか?

解決

他の人が指摘したように、新しい Perl を別の場所にインストールすることから始めます。いくつかの Perl がインストールされており、それぞれが他の Perl から完全に分離されています。

そのためには、ソースを自分で設定してコンパイルする必要があります。走るとき configure, インストーラーを指定する機会が得られます。これについては、「独自の Perl のコンパイル」で詳細な手順を説明しました。 The Perl Review の 2008 年春号. 。アイテムもあります 効果的な Perl プログラミング それはその方法を示しています。

ここで、元のディストリビューションに戻って実行します。 cpan -a 自動バンドル ファイルを作成します。これは、インストールしたすべての追加要素をリストする Pod ドキュメントであり、CPAN.pm はそれを使用してすべてを再インストールする方法を理解しています。

新しい Perl にインストールするには、その Perl のパスを使用して CPAN.pm を起動し、作成した自動バンドル ファイルをインストールします。CPAN.pm は、その Perl の設定から正しいインストール パスを取得します。

出力を見て、物事がうまく進んでいることを確認してください。このプロセスでは、同じバージョンのモジュールではなく、最新バージョンがインストールされます。

はどうかと言うと ストロベリーパール, 、デフォルトの場所以外の場所にインストールできる「ポータブル」バージョンがあります。そうすれば、新しい Perl をリムーバブル メディアに保存できます。ローカルのインストールを妨げることなく、好きな場所でテストできます。ただし、一般的に使用できる状態ではないと思います。の ベリーブリュー ツールはそれを管理するのに役立つかもしれません。

幸運を、 :)

他のヒント

の使用を真剣に検討してみます ストロベリーパール.

Perl の 2 番目のバージョンを別の場所にインストールできます。非コア モジュールを新しいバージョンに再インストールする必要があります。一般に、Perl の異なるバージョンにはバイナリ互換性がないため、XS コンポーネントを利用するプログラム固有のライブラリがある場合に問題になる可能性があります。純粋な Perl モジュールは影響を受けません。

5.8 トラック内に留まる場合、同じ 5.8 シリーズ内ではバイナリ互換性が保証されているため、XS (バイナリ) 拡張機能を含むインストール済みモジュールはすべて引き続き動作します。5.10 に移行した場合は、XS コンポーネントを含むモジュールを再コンパイルする必要があります。

新しいビルドで以前のインクルード ディレクトリが @INC 配列 (モジュールの検索に使用される) にリストされていることを確認するだけです。

音からすると、Windows を使用していると思います。その場合、現在の @INC パスは次のように表示できます。

perl -le "print for @INC"

必ず別のディレクトリにある新しい Perl バージョンをターゲットにしてください。以前のバージョンと喜んで共存し、これにより、どのPerlインストールが使用されるかを選択できます。PATH の順序を整理するだけの問題です。Perl インタプリタは起動されるとすぐに、残りのモジュールをどこで探すべきかを認識します。

Strawberry Perl は、おそらく最近の Windows 上で独自のディストリビューションを作成するのに最も優れたディストリビューションです。

これに対する答えは次のとおりだと思います 仮想化 ある種の:

  1. 現在稼働中のマシンの正確なコピーをセットアップします。現在使用しているのと同じディレクトリの場所と構造を使用して、Perl をアップグレードします。
  2. スクリプトを実行して新しいイメージでテストします。
  3. 満足したらスイッチを入れてください。

この背後にある考えは、おそらく、あなたが考えもしなかったあらゆる種類の微妙な依存関係や仮定があるということです。可能性は低いですが、特定のモジュール (さらに可能性は低いですが、コア モジュールの可能性もあります) の最新バージョンには、使用していたものと比べて微妙な違いがある可能性があります。コードベース全体を徹底的に調べていない限り、特定の状況下でのみ必要となる特定のモジュールが存在する可能性は十分にあります。

すべてのスクリプトのリストを作成することで、この問題を見つけることができます。すべてのコードがバージョン管理下にあるため、このリストはとにかく作成する必要があります。 バージョン管理を使用する、例: 転覆, 、はい?) - そしてそれを反復して実行します perl -c 各スクリプトについて。例えば このスクリプト. 。この種の自動テストは非常に貴重です。実行を設定し、コーヒーなどを飲みに出かけ、戻ってきてすべてが機能したかどうかを確認することができます。最初の数回は、おそらく忘れていたあいまいなモジュールを見つけるでしょうが、それは問題ありません。これを自動化する最大のポイントは、 あなた スクリプトをすべてチェックするという単調な作業を行う必要はありません。

それを実行したとき、新しいものを別のディレクトリにインストールしました。2 つのバージョンを実行すると少し混乱が生じますが、最初にすべてが動作していることを確認するのに間違いなく役立ち、いざというときに古いバージョンにすばやく切り替える方法が提供されます。また、2 つの別々のサービスを実行するように Apache をセットアップしたので、古い Perl 上の運用サービスには触れずに、1 つのサービスで新しい Perl をいじることができました。

今にして思えば、別のコンピューターにインストールして、そこでテストを行う方がはるかに賢明でしょう。必要な構成変更をすべて記録します。

自分でビルドするかどうかはわかりません。私はいつも Windows 用にパッケージ化されたバイナリを使用していました。

あなたが何を尋ねているのか正確に理解できません。5.8 メイクファイルに加えた変更のリストはありますか?あるいは、問題はそのようなリストをどのように入手するかということです。また、CPAN から入手した基本インストールより上位のパッケージを確認する方法も知りたいのですか?また、CPAN からパッケージを再度取得した場合に、カスタム変更によってそれらのパッケージが破損しないことをテストする方法も知りたいのですか?

ActivePerl とその「ppm」ツールを使用してモジュールを (再) インストールしてみてはいかがでしょうか。

alt text

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top