不足しているPerlモジュールをインストールする最も簡単な方法は何ですか?


192

私はこのエラーを受け取ります:

Can't locate Foo.pm in @INC

ダウンロード、展開、作成などよりも簡単にインストールできますか?


1
問題のモジュールがコアモジュールである場合は、「Archive / Tar.pmが見つからない」の修正方法を参照してください。
池上

セキュリティについては十分注意してください。モジュールが変更されていないことを確認するために必要なものは、信頼できるサイトから安全な方法でダウンロードする必要があります。の使用に関する私の回答を参照しくださいcpan
-vinc17

回答:


226

Unixの場合

通常、シェルでcpanを起動します。

# cpan

そしてタイプ

install Chocolate::Belgian

または短い形式で:

cpan Chocolate::Belgian

Windowsの場合

WindowsでActivePerlを使用している場合、PPM(Perl Package Manager)はCPAN.pmとほぼ同じ機能を備えています。

例:

# ppm
ppm> search net-smtp
ppm> install Net-SMTP-Multipart

Perlモジュールのインストール方法を参照してくださいCPAN FAQ

多くのディストリビューションは、多くのperlモジュールをパッケージとして出荷しています。

  • Debian / Ubuntu: apt-cache search 'perl$'
  • Arch Linux: pacman -Ss '^perl-'
  • Gentoo:カテゴリー dev-perl

自動(セキュリティ)更新削除の容易さから恩恵を受けるため、常にそれらを優先する必要があります。これはcpanでかなりトリッキーになる可能性がありますツール自体です。

Gentooには、CPANからモジュールをビルド/インストールし、Gentooパッケージ(ebuild)を作成するg-cpanという素晴らしいツールがあります。


14
短い形式は、コマンドラインからの "cpan Chocolate :: Belgian"だけです:)
brian d foy

3
最新のActivePerlであるIIRCにはコマンドラインppmがなくなりました。これで、豪華なGUIが開きます。
ケヴ

6
「ppm」だけでGUIが開きますが、その後にコマンドが続きます。したがって、「ppm help」、「ppm install ...」など
Bill Ruppert

ppmは、通常の二重コロンではなく、モジュールパス区切り文字にダッシュを使用することに注意してください。(おそらく、コロンはドスのドライブを意味するためでしょうか?)それは私に数回
マシューロック

3
@MatthewLock:インストールするディストリビューションを指定するため、ppmハイフンを使用します。これは、より正直です。たとえば、のインストールに使用した場合、またはディストリビューションがインストールされます。大部分のディストリビューションには、同等の名前の単一のモジュールが含まれていますが、そのようないくつかの例外があります-cpanLWPLWP::SimpleLWP::UserAgentlibwww-perl
ボロディン

65

App :: cpanminusを試してください:

# cpanm Chocolate::Belgian

インストールするだけの場合に最適です。これは、CPANまたはCPANPLUSのより複雑な機能を提供しないため、インストールするモジュールがわかっていれば、簡単に使用できます。まだcpanminusを取得していない場合は、次のように入力します。

# cpan App::cpanminus

それをインストールします。

cpanをまったく使用せずにインストールすることもできます。基本的なブートストラップ手順は、

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

詳細については、App :: cpanminusページに移動し、インストールに関するセクションを参照してください。


7
を使用cpanしてインストールするのApp::cpanminusは少し奇妙です。通常のインストール手順には、cpanmin.usからその一部をダウンロードし、それを使用して残りをインストールするブートストラップ手順が含まれます。これcpanにより、(その後)役に立たない.cpanディレクトリの構成と作成が回避されます。
Chas。オーエンス

Ubuntuでは、cpanminusターミナルからインストールするだけです。エラーログが画面に表示されず、一時ログファイルに保存され、エラーが発生した場合のパスが示されるので、私はcpanmより良い方法を見つけましたcpan
user13107

コマンドを試行すると、このエラーが発生します。@ INCでstrict.pmが見つかりません(strictモジュールをインストールする必要がある場合があります)(@INCには次のものが含まれます:/ etc / perl
IgorGanapolsky

29

私は、sudoの下でcpanを1回実行することを提案している人々がいることに注意します。以前はシステムディレクトリにインストールするために必要でしたが、最新バージョンのCPANシェルでは、インストールのためだけにsudoを使用するように構成できます。これは、テストがrootとして実行されないことを意味するため、はるかに安全です。

古いCPANシェルがある場合は、新しいcpanをインストールして(「CPANのインストール」)、シェルをリロードすると、これらの新しいディレクティブを構成するように求められます。

最近では、古いCPANがインストールされているシステムを使用している場合、最初に行うことは、シェルを更新し、それをセットアップして、ほとんどのcpan作業を通常のユーザーとして実行できるようにすることです。

また、Windowsユーザーにはstrawberry Perlを調査することを強くお勧めします。これは、事前設定されたCPANシェルとコンパイラがパッケージされたバージョンのPerlです。また、XML :: Parserなどの外部Cライブラリの依存関係を持つ、コンパイルが難しいPerlモジュールも含まれています。これは、モジュールのインストールに関して、他のすべてのPerlユーザーと同じことを実行できることを意味し、物事はより頻繁に「うまくいく」傾向があります。


1
install CPANどこから?$sudo apt-get install cpan
同型写像

1
@Lao Tzu:いいえ、CPANはPerlコアモジュールであり、個別のDEBパッケージとしては使用できません。ほとんどの場合App::cpanminus、使用するのがさらに良いと思います。使用するのはとても楽しいです。フィリップ・ポッターは彼の答えでここにそれを提案し、あなたはこのチャスを試すことができますオーエンスは答える

25

Ubuntuを使用していて、事前にパッケージ化されたperlモジュール(たとえば、geo :: ipfree)をインストールする場合は、次のようにします。

    $ apt-cache search perl geo :: ipfree
    libgeo-ipfree-perl-IPアドレスPerlモジュールのルックアップ国

    $ sudo apt-get install libgeo-ipfree-perl

これは素晴らしい。ありがとうございました。
Ivan X

16

数人がcpanユーティリティについて言及しましたが、それは単にシェルを起動するだけではありません。インストールするモジュールを指定して、機能させるだけです。

$prompt> cpan Foo::Bar

引数を指定しないと、CPAN.pmシェルが起動します。これはUnix、Macで機能し、Windows(特にStrawberry Perl)では問題ないはずです。

cpanツールを使用してできることは他にもいくつかあります。現在の機能の概要を以下に示します(CPAN.pmおよびperlに付属する機能よりも新しい可能性があります)。

-a
Creates the CPAN.pm autobundle with CPAN::Shell->autobundle.

-A module [ module ... ]
Shows the primary maintainers for the specified modules

-C module [ module ... ]
Show the Changes files for the specified modules

-D module [ module ... ]
Show the module details. This prints one line for each out-of-date module (meaning,
modules locally installed but have newer versions on CPAN). Each line has three columns:
module name, local version, and CPAN version.

-L author [ author ... ]
List the modules by the specified authors.

-h
Prints a help message.

-O
Show the out-of-date modules.

-r
Recompiles dynamically loaded modules with CPAN::Shell->recompile.

-v
Print the script version and CPAN.pm version.

11

sudo perl -MCPAN -e 'install Foo'


素晴らしい、これは今ちょうどGit perlを使用するWindowsで動作しましたが、最初にGnuWin makeをインストールする必要がありました
wytten


8

オットーは良い提案をしました。これはDebianだけでなく、他のDebian派生物でも機能します。欠けている部分は、apt-cache検索で何かが見つからない場合の対処法です。

$ sudo apt-get install dh-make-perl build-essential apt-file
$ sudo apt-file update

次に、インストールしたいランダムなモジュールがあるときはいつでも:

$ cd ~/some/path
$ dh-make-perl --build --cpan Some::Random::Module
$ sudo dpkg -i libsome-random-module-perl-0.01-1_i386.deb

これにより、Some :: Random :: Moduleを取得するためにインストールできるdebパッケージが提供されます。ここでの大きな利点の1つは、モジュール自体に加えて、manページとサンプルスクリプトがディストリビューションの選択した場所に配置されることです。ディストリビューションに新しいバージョンのSome :: Random :: Moduleの公式パッケージが付属している場合は、apt-getのアップグレード時に自動的にインストールされます。


7

すでに回答および承認済みの回答-とにかく:

私見CPANモジュールをインストールする最も簡単な方法(Unixのようなシステムで、Windowsについて何も知らない)は次のとおりです。

curl -L http://cpanmin.us | perl - --sudo App::cpanminus

上記はと呼ばれる「ゼロ構成CPANモジュールインストーラー」のインストールcpanmです。(インストールには数分かかる場合があります-プロセスを中断しないでください)

その後-単に:

cpanm Foo
cpanm Module::One
cpanm Another::Module

6

の推奨事項はたくさんありCPAN.pmますが、これを使用している場合は、どちらにPerl 5.10でもアクセスできるCPANPLUS.pmようにCPAN.pmなります。

そしてもちろん、それはCPANまだ古いバージョンのPerlを使用している人々のために利用可能です。試してみませんか:

$ cpan CPANPLUS

へh、かわいい。CPAN.pmを使用して、自身をCPANPLUSに置き換えます。:)
ブライアン・ド・フォイ2008年

5

多くの場合、cmake installコマンドが失敗し、「make testは不正なステータスを返しました。強制しないとインストールできません」のようなメッセージが表示されます

その場合、以下はモジュールをインストールする方法です:

perl -MCPAN -e "CPAN::Shell->force(qw(install Foo::Bar));"

残念ながら、これは次の結果をもたらします:@INCでCPAN.pmを見つけることができません(CPANモジュールをインストールする必要がある場合があります)(@INCには以下が含まれます:/ etc / perl
IgorGanapolsky 2017年

4

ubuntuでは、ほとんどのperlモジュールがすでにパッケージ化されているため、コンパイルする必要がある他のほとんどのシステムよりもインストールがはるかに高速です。

Foo::Barたとえばコマンドプロンプトでインストールするには、通常は次のようにします。

sudo apt-get install libfoo-bar-perl

残念ながら、すべてのモジュールがその命名規則に従っているわけではありません。



4

cpanコマンドを次のように使用します cpan Modulename

$ cpan HTML::Parser

依存関係をインストールするには、以下に従ってください

$ perl -MCPAN -e shell
cpan[1]>  o conf prerequisites_policy follow
cpan[2]>  o conf commit
exit

私はApp :: cpanminusを好み、依存関係を自動的にインストールします。するだけ

$ cpanm HTML::Parser

3

私が知っている2つの方法:

PPMの使用:

Windowsの(のActivePerl)私が使用したppmで

コマンドラインから「ppm」と入力します。ppmプロンプトで...

ppm> install foo

または

ppm> search foo

利用可能なfooモジュールのリストを取得します。タイプヘルプすべてのコマンドについて

CPANの使用:

次のようにCPANを使用することもできます(* nixシステム):

perl -MCPAN -e 'shell'

あなたにプロンプ​​トを出します

cpan>

プロンプトで...

cpan> install foo  (again to install the foo module)

cpanのコマンドのリストを取得するには、hと入力します


1
「$ cpan Foo :: Bar」と言うだけで、コマンドラインから直接インストールすることもできます。豪華なワンライナーやCPANシェルは必要ありません。:)
ブライアン・ド・フォイ2008


3

Fedora LinuxEnterprise Linuxyumまた、perlのライブラリの依存関係を追跡します。そのため、perlモジュールが使用可能で、一部のrpmパッケージがその依存関係をエクスポートする場合、適切なパッケージがインストールされます。

yum install 'perl(Chocolate::Belgian)'

(おそらくperl-Chocolate-Belgianパッケージ、あるいはChocolateFactoryパッケージさえ)


3

私にとって最も簡単な方法はこれです:

PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'install DateTime::TimeZone'

a)再帰的な依存関係の自動検出/解決/インストール

b)それはシェルオンラインで、セットアップスクリプトに適しています


2

新しいモジュールを、cpanシェルが使用するように構成されていないカスタムの場所に配置する場合は、おそらく以下が便利です。

 #wget <URL to the module.tgz>
 ##unpack
 perl Build.PL
./Build destdir=$HOME install_base=$HOME
./Build destdir=$HOME install_base=$HOME install

2

時には、を使用しyum search fooて関連するperlモジュールを検索してから、を使用yum install xxxしてインストールできます。


2

安全なソリューション

多くの回答が、セキュリティについて何も言わずにcpanユーティリティ(を使用CPAN.pm)の使用について言及しています。デフォルトでは、CPAN2.27以前urllistはhttp URL(つまり、http: //www.cpan.org/)を使用するように構成されているため、MITM攻撃を許可するため、安全ではありません。これは、ダウンロードに使用されるものですCHECKSUMSファイルためにため、安全なURL(例:https : //www.cpan.org/)に変更する必要があります。

そのため、cpanを実行してデフォルトの構成を受け入れた後、生成されたMyConfig.pmファイル(フルパスが出力されます)を次のように変更する必要があります。交換する

'urllist' => [q[http://www.cpan.org/]],

沿って

'urllist' => [q[https://www.cpan.org/]],

注:httpsでは不十分です。信頼できるWebサイトも必要です。したがって、任意のミラーを選択する場合は注意してください。

その後、使用できます cpan、通常の方法で。

安全でないURLに関するrt.cpan.orgに関する私のバグレポート


「んcpan.org」「にリダイレクトされませcpan.org」?
Dave Everitt

1
@DaveEveritt httpからhttpsへのリダイレクトは、プライバシー上でのみ役立ちます。たとえば、ネットワーク上を通過するデータのみを見ることができる人に対するものです。しかし、攻撃者がネットワークを制御している場合(たとえば、パブリックwifiホットスポットまたは保護されていないローカルネットワーク)、中間者攻撃が可能であり、攻撃者は自分のサーバーを使用します(明らかにそうではありませんhttps://www.cpan.org/)。
vinc17

1

PerlのActiveStateディストリビューションを備えたWindowsでは、ppmコマンドを使用します。



1

あなたはすでにあなたの答えを持っているようですが、私は私がチャイムを鳴らすだろうと考えました。これは私がUbuntu(またはdebianサーバー)のいくつかのスクリプトで行うことです

#!/usr/bin/perl

use warnings;
use strict;

#I've gotten into the habit of setting this on all my scripts, prevents weird path issues if the script is not being run by root
$ENV{'PATH'} = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin';

#Fill this with the perl modules required for your project
my @perl = qw(LWP::Simple XML::LibXML MIME::Lite DBI DateTime Config::Tiny Proc::ProcessTable);

chomp(my $curl = `which curl`);

if(!$curl){ system('apt-get install curl -y > /dev/null'); }

chomp(my $cpanm = system('/bin/bash', '-c', 'which cpanm &>/dev/null'));

#installs cpanm if missing
if($cpanm){ system('curl -s -L http://cpanmin.us | perl - --sudo App::cpanminus'); }

#loops through required modules and installs them if missing
foreach my $x (@perl){
    eval "use $x";
    if($@){
        system("cpanm $x");
        eval "use $x";
    }
}

これは私にはうまくいきます、多分ここにあなたが使うことができる何かがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.