2017-10-16 11 views
6

CPANがファイルをインストールする場所についての権威的/包括的な説明が見つかりません。私は、一連のルールが必要であると仮定し、 "XYZ directory"と同じくらいシンプルではないと思います。たとえば、Perlのインストールが1つでも、Linuxボックスの複数のユーザーがCPANを実行できます。だから、それらのルールは何ですか?CPANはどこにモジュールをインストールしますか?

この質問の2番目の部分:PERL5LIB環境変数のドキュメントには、「標準ライブラリと現在のディレクトリを調べる前にPerlライブラリファイルを探すディレクトリのリスト」と書かれています。

私は、おそらく特定のPerlバージョンで修正されているので、CPANが標準ライブラリの場所にインストールされないと仮定します。だから多分CPANがPERL5LIBにインストールされますか?

最後に、私がすでに触れたように、CPANは複数のユーザーが同じPerlインストールを実行しているという事実をどのように扱いますか?申し訳ありませんが、それは別の質問ですが、おそらく関連しているようです。

答えて

5

Perlは、3セットのインストール場所を指定します。

  • perl、Perl自体に含まれるモジュール用。
  • vendorperlバイナリのプロバイダによってインストールされたモジュール用。
  • sitecpanを使用してインストールされたモジュール用。

これらの各セットは、いくつかのファイルタイプのインストール場所を提供します。

     Installation location 
         -------------------------------------------------------- 
Type of file   perl    vendor     site 
---------------------- --------------- --------------------- ------------------- 
Build-specific modules installarchlib installvendorarch  installsitearch 
Modules     installprivlib installvendorlib  installsitelib 
Binary programs   installbin  installvendorbin  installsitebin 
Other programs   installscript installvendorscript installsitescript 
man pages for scripts installman1dir installvendorman1dir installsiteman1dir 
man pages for modules installman3dir installvendorman3dir installsiteman3dir 
html docs for scripts installhtml1dir installvendorhtml1dir installsitehtml1dir 
html docs for modules installhtml3dir installvendorhtml3dir installsitehtml3dir 

次を使用して、これらのいずれかの場所のパスを取得することができます。

perl -V:{var} 

次を使用して、これらの場所のためのすべてのパスを取得することができます。

perl -V:'install.*' 

ものがありますデフォルトはインストーラによって使用されます[1]。しかし、2つの最も一般的に使用されるインストーラは、ユーザがインストールを行って、これらのいずれかおよびすべてを無効にすることを可能にします。モジュールが非標準の場所にインストールされている場合は、PERL5LIBを使用して、perlにモジュールの場所を知らせることができます。 CPANモジュールをインストールしません


  1. 。それはリポジトリです。

    cpanモジュールをインストールしません。 cpanはCPANから配布ファイルをダウンロードし、Makefile.PLBuild.PLで提供されているインストーラを実行します。 (同じことがcpanmcpanpのために行く。)

    (他のインストーラが存在しますが)これらのスクリプトは、ほとんどExtUtils::MakeMakerまたはModule::Build自分でインストールを使用します。

+0

CPAN-the-repositoryに加えて、CPAN-per-Perモジュール( 'cpan'コマンドが使用するもの)もあります。 – melpomene

+0

テーブルはどこかから供給されていますか、それとも自分で書きましたか? – simbabque

2

実際にCPANはファイルをインストールしません。各ディストリビューションに組み込まれたインストールスクリプトが実行され、実際のインストールが実行されます。 https://metacpan.org/pod/ExtUtils::MakeMaker#make-installを(とINSTALLDIRSのデフォルト値はsiteです):ExtUtils::MakeMakerを使用して配布するために

は、デフォルトでは、ここに記載されています。 Module::Buildについては、https://metacpan.org/pod/Module::Build#INSTALL-PATHSを参照してください。

$Config{foo}または%Configについてのドキュメントは、the Config moduleによって提供される%Config変数を意味します。 $Config{foo}の値は、perl -V:fooを実行して検査することもできます。

(あなたはこれが不必要に複雑なようだと思うなら、あなたは正しい。)Perlは複数の「特定のサイト」のためにそのうちの1つは、「システムディレクトリ」、モジュールを有し、従ってとして使用すること

短いバージョンですデフォルトのインストール先。あなたはこれがマルチユーザシステムとうまく融合しない単一のディレクトリ(perlインストール単位)であることは間違いありません。すべてのユーザで共有されており、モジュールをインストールするにはroot権限が必要です(そうすることで、システムパッケージからモジュールをオーバーライドするのは悪い考えです)。

代わりに、ExtUtils :: MakeMaker、Module :: Buildなどを設定してユーザのホームディレクトリにインストールする人はいますか?これは環境変数で行うことができます。そして、perlにこのディレクトリを@INCに追加するように指示するので、実際にモジュールを見つけて読み込むことができます。これは別の環境変数PERL5LIBで行われます。 (PERL5LIBはインストールには影響しません。ローディングにはまったく使用されています)。

上記はすべて自動化され、local::libでカプセル化されています。 (ローカル:: libには、プロジェクトごとのモジュールのサブディレクトリを作成するなどにも使用することができます。)

CPANのドキュメントにも書かれています:CPAN 1.9463のよう

を、あなたが書き込み権限を持っていない場合デフォルトのperlライブラリディレクトリでは、CPANの設定プロセスは、ブートストラップをlocal::libにするかどうかを尋ねるので、個人用のperlライブラリディレクトリを簡単に保つことができます。


あなたは、その場合には、「システム」ディレクトリが$HOME下だけで、別のサブディレクトリであるため、誰と共有されていないと缶(自分のホームディレクトリにプライベートPerlをインストールすることで、全体の問題を回避することができますあなたが書いてください)。これは非常に簡単です。 perlbrew


もう1つの注意:ドキュメントには、PERL5LIBのバグが見つかりました。 "および現在のディレクトリ"は古くなっています。セキュリティ上の理由から、.がデフォルトのモジュールの場所の一覧から削除されています。

+0

ありがとう、これは役に立ちます。これに関して: "ExtUtils :: MakeMaker、Module :: Buildなどをユーザのホームディレクトリにインストールするように設定するのは、"人々は何をするのですか? "local :: libはこれを冗長にしますか? – Stephen

+0

@Stephenまあ、ほとんどの人はそれを行うためにlocal :: libを使います。 :-) local :: libは、いくつかのディレクトリを作成し、いくつかの環境変数を正しく設定する自動化された方法の中核にあります。だからyes:local :: lib(あなたの '.bashrc 'やそれに相当するものに魔法の行を加えて)を使うなら、手作業で他のものを設定する必要はありません。 – melpomene

1

これは複雑な質問です。あなたはコアライブラリはそれらのいずれかの場所を求めていることである場所を伝えることができます:Bコアモジュールが配置されている場所

perldoc -l B 

はあなたを教えてくれます。そして、異なる結果を持つ他の人を試すことができます...

perl -Vまた、@INCの値とともに重要なすべてのシェル変数、それがライブラリを探す場所を教えてくれます。

コアライブラリは通常ローカルライブラリとは異なる場所にあります。また、perlbrewlocal::libを使用している場合は、さらに検討する必要があります。シェル変数については、PERL5LIBとともに、PERL_LOCAL_LIB_ROOTもあります。

他の質問については、私はがシステム全体にライブラリをインストールするかもしれないと言います。どのユーザもシェル変数やコマンドラインオプションperl -I <lib location>のような他の手段、あるいはuse lib <lib location>;のようなコードの中に含まれているそれらの場所を持っています。

perlbrewに沿っlocal::libとローカルディレクトリにPerlのとライブラリをインストールするには、非特権ユーザーに許可することもあります。

CPANからモジュールをインストールする方法については、私のお気に入りはcpanminusです。これはcpanm <library to install>で呼び出されます。それは決して失敗しません...

関連する問題