4

perlbrewで失敗しCan't locate Devel/PatchPerl.pmます。

より正確には、失敗するのはpatchperlによって生成された の実行ですperlbrew

実際にDevel/PatchPerl.pm、環境変数のパスを介してアクセスできますが、PERL5LIB実行前にこの変数をperlbrew無条件に削除perlpatchします。

delete $ENV{$_} for qw(PERL5LIB PERL5OPT);

perlbrewこの操作を正当化するドキュメントは見つかりません。

誰かがこれを行う理由を説明できますかperlbrew?

編集:

以下はbash、問題を再現するスクリプトです。私はこのように実行します(いくつかの適切な を使用<PATH_TO_SCRIPT>):

% env -i HOME=$HOME SHELL=/bin/bash /bin/bash --noprofile --norc
bash-3.2$ /bin/bash --norc --noprofile <PATH_TO_SCRIPT>

スクリプトの実行時間は、私のマシンで約 4 分です。エラーを示す行を含む、出力の最後の数行を以下に示します。

(cd /tmp/perlbrew_root/build/perl-5.16.3 && rm -f config.sh Policy.sh && patchperl && sh Configure -de '-Dprefix=/tmp/perlbrew_root/perls/perl-5.16.3' '-A'eval:scriptdir=/tmp/perlbrew_root/perls/perl-5.16.3/bin'' && make  && make test_harness && make install) 2>&1 | tee /tmp/perlbrew_root/build.perl-5.16.3.log
Can't locate Devel/PatchPerl.pm in @INC (@INC contains: /Library/Perl/5.12/darwin-thread-multi-2level /Library/Perl/5.12 /Network/Library/Perl/5.12/darwin-thread-multi-2level /Network/Library/Perl/5.12 /Library/Perl/Updates/5.12.3 /System/Library/Perl/5.12/darwin-thread-multi-2level /System/Library/Perl/5.12 /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level /System/Library/Perl/Extras/5.12 .) at /tmp/testperl/bin/patchperl line 12.
BEGIN failed--compilation aborted at /tmp/testperl/bin/patchperl line 12.
perl-5.16.3 is successfully installed.

上記の出力の最後の行 ( perl-5.16.3 is successfully installed.) はナンセンスです。実際のビルドとインストールにperl-5.16.3は、このスクリプトの実行時間よりも約 1 桁長くかかります。既に述べたように、私のマシンでは約 4 分かかります。

@INCエラーに注意してください。を考えると、の下にある をどのようにpatchperl見つけることができるかわかりません。Devel/PatchPerl.pm/tmp/testperl/lib/perl5@INC

PERLDIR=/tmp/testperl
/bin/rm -rf "$PERLDIR"

/bin/rm -rf /tmp/build
/bin/mkdir -p /tmp/build
cd /tmp/build

/usr/bin/curl -s http://www.cpan.org/authors/id/A/AP/APEIRON/local-lib-1.008009.tar.gz | tar xzf -

pushd local-lib-1.008009
  /usr/bin/perl Makefile.PL "--bootstrap=$PERLDIR"
  /usr/bin/make install
popd

eval "$( /usr/bin/perl -I$PERLDIR/lib/perl5 -Mlocal::lib=$PERLDIR )"

/usr/bin/cpan App::cpanminus

export PERLBREW_ROOT=/tmp/perlbrew_root
export PERLBREW_HOME=/tmp/perlbrew_home
/bin/rm -rf "$PERLBREW_ROOT" "$PERLBREW_HOME"

$PERLDIR/bin/cpanm App::perlbrew
$PERLDIR/bin/perlbrew init
source "$PERLBREW_ROOT/etc/bashrc"

$PERLDIR/bin/perlbrew install -v perl-5.16.3
4

3 に答える 3

1

をインストールした後、perlbrew の新規 (のみ) インストールを試みた後、私はこれに遭遇しましたlocal::lib。CPAN 経由で perlbrew をインストールすると (唯一の方法ではありませんが、curl -kL http://install.perlbrew.pl | bash以前にlocal::lib無効にして使用しました)、Devel::PatchPerlモジュールは に適切にインストールされ~/perl5/lib/perl5ましたが、両者が見つけたように、そこには表示されperlbrewません。実行perlbrew install-patchperlすると、スタンドアロン バージョンの patchperl (でビルド) が にインストールApp::FatPackerされ~/perl5/perlbrew/binます。

これにより、ローカルの「システム」perl と、によって提供されるカスタマイズされたライブラリとツールを使用してlocal::lib、通常の実験的な作業を行うことができます。しかしperlbrew、より制御された環境のために、特別なプロジェクトやアプリケーションのために 'ed perl の使用に切り替えることができます。実際のシステム perl はほとんど変更されません。

警告- で local::lib がデフォルトで有効になっている場合、特定の環境変数 (PERL_MM_OPT および PERL_MM_OPT - 自分で行う必要があります.bashrc) を簡単にperlbrew use perl-5.18.2削除することはできません。local:lib

perlbrew lib create perl-5.18.2@none  # do this once after brewing a perl
perlbrew use perl-5.18.2@none
perlbrew use perl-5.18.2

これは、perlbrew をオフにするには、次のようにできることも意味します。

perlbrew off
eval $(perl -Mlocal::lib | grep -v PERL_LOCAL_LIB_ROOT)

これで、デフォルトの local::lib セットアップに戻りました。ただし、無限に拡張しないように、新しいシェルを閉じて再度開くことをお$PATH勧めします。

これは、システム perl とデフォルト (local::lib) のカスタマイズを含む、独立したカスタム perl 環境を取得するためにこれまでに見つけた最も簡単な方法です。

于 2014-12-08T22:16:51.810 に答える