安装丢失的Perl模块最简单的方法是什么?

时间:2008-09-15 19:16:08

标签: perl install cpan

我收到此错误:

Can't locate Foo.pm in @INC

安装它是否比下载,解决,制作等更容易?

24 个答案:

答案 0 :(得分:201)

在Unix上

通常你在shell中启动 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

请参阅“CPAN常见问题解答”中的How do I install Perl modules?

许多发行版都将许多perl模块作为包发布。

  • Debian / Ubuntu:apt-cache search 'perl$'
  • Arch Linux:pacman -Ss '^perl-'
  • Gentoo:类别dev-perl

您应该始终更喜欢它们,因为您可以从自动(安全)更新删除的简易性中受益。使用 cpan 工具本身可能非常棘手。

对于Gentoo,有一个很好的工具叫做 g-cpan ,可以从CPAN构建/安装模块,并为你创建一个Gentoo包(ebuild)。

答案 1 :(得分:60)

尝试App::cpanminus

# cpanm Chocolate::Belgian

安装东西真是太棒了。它不提供CPAN或CPANPLUS的更复杂功能,因此只要您知道要安装哪个模块,它就很容易使用。如果你还没有cpanminus,只需输入:

# cpan App::cpanminus

安装它。

也可以在不使用cpan的情况下安装它。基本的引导程序是,

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

有关更多信息,请访问App :: cpanminus页面并查看有关安装的部分。

答案 2 :(得分:28)

我注意到一些人建议在sudo下运行一个cpan。以前需要安装到系统目录中,但CPAN shell的现代版本允许您将其配置为使用sudo 只需进行安装。这样更安全,因为这意味着测试不会以root身份运行。

如果你有一个旧的CPAN shell,只需安装新的cpan(“安装CPAN”),当你重新加载shell时,它应该提示你配置这些新的指令。

现在,当我使用旧CPAN的系统时,我要做的第一件事是更新shell并将其设置为执行此操作,以便我可以将我的大部分cpan工作作为普通用户。

此外,我强烈建议Windows用户调查strawberry Perl。这是Perl的一个版本,它与预配置的CPAN shell和编译器一起打包。它还包括一些难以编译的Perl模块及其外部C库依赖项,特别是XML :: Parser。这意味着在安装模块时,您可以像其他每个Perl用户一样执行相同的操作,并且事情往往会“更频繁地工作”。

答案 3 :(得分:22)

如果您使用的是Ubuntu并且想要安装预先打包的perl模块(例如,geo :: ipfree),请尝试以下操作:

    $ apt-cache search perl geo::ipfree
    libgeo-ipfree-perl - A look up country of ip address Perl module

    $ sudo apt-get install libgeo-ipfree-perl

答案 4 :(得分:15)

有几个人提到了cpan实用程序,但它不仅仅是启动shell。只需给它你想要安装的模块,让它做它的工作。

$prompt> cpan Foo::Bar

如果你没有给它任何参数,它会启动CPAN.pm shell。这适用于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.

答案 5 :(得分:11)

sudo perl -MCPAN -e 'install Foo'

答案 6 :(得分:10)

另见Yes, even you can use CPAN。它显示了如何在没有root或sudo访问权限的情况下使用CPAN。

答案 7 :(得分:8)

奥托做了good suggestion。这也适用于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

这将为您提供一个deb软件包,您可以安装它来获取Some :: Random :: Module。这里的一大好处是手册页和示例脚本以及模块本身将放置在您的发行版所选位置。如果发行版有一个更新版本的Some :: Random :: Module的官方软件包,它会在你升级时自动安装。

答案 8 :(得分:7)

已经回答并接受了答案 - 但无论如何:

恕我直言,安装CPAN模块的最简单方法(在类似unix的系统上,并且不知道wondows)是:

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

以上是安装名为cpanm的“零配置CPAN模块安装程序”。 (可能需要几分钟才能安装 - 不要破坏过程)

之后 - 简单地说:

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

答案 9 :(得分:6)

CPAN.pm的大量推荐,这很棒,但如果您使用的是Perl 5.10,那么您还可以访问CPANPLUS.pm CPAN.pm,但CPAN更好。

当然,对于仍在使用旧版本Perl的用户,它可以在$ cpan CPANPLUS 上使用。为什么不尝试:

{{1}}

答案 10 :(得分:5)

很多时候,cpan install命令失败并发生了类似的消息 “让测试返回不良状态,不会无力安装”

在这种情况下,以下是安装模块的方法:

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

答案 11 :(得分:4)

即使它应该工作:

cpan -i module_name

答案 12 :(得分: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

答案 13 :(得分:4)

在ubuntu上,大多数perl模块已经打包,因此安装速度比大多数其他必须编译的系统快得多。

要在命令提示符下安装Foo::Bar,例如通常只需执行以下操作:

sudo apt-get install libfoo-bar-perl

可悲的是,并非所有模块都遵循该命名约定。

答案 14 :(得分:3)

在Fedora上你可以使用

# yum install foo

只要Fedora有一个现有的模块包。

答案 15 :(得分:3)

我知道的两种方式:

使用PPM:

使用 Windows (ActivePerl)我使用了ppm

从命令行输入ppm。在ppm提示符......

ppm> install foo

ppm> search foo

获取可用的foo模块列表。为所有命令输入帮助

使用CPAN:

你也可以像这样使用CPAN( * nix systems ):

perl -MCPAN -e 'shell'

给你一个提示

cpan>

在提示......

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

键入h以获取cpan

的命令列表

答案 16 :(得分:3)

Fedora LinuxEnterprise Linux上,yum也跟踪perl库依赖项。因此,如果perl模块可用,并且某些rpm包导出该依赖项,它将为您安装正确的包。

yum install 'perl(Chocolate::Belgian)'

(最有可能是perl-Chocolate-Belgian包,甚至是ChocolateFactory包)

答案 17 :(得分:3)

对我来说最简单的方法是:

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

a)自动递归依赖检测/解析/安装

b)它是一个shell在线资源,适用于setup-scripts

答案 18 :(得分:2)

如果您想将新模块放入您的cpan shell未配置使用的自定义位置,那么可能以下方便。

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

答案 19 :(得分:2)

有时您可以使用yum search foo搜索相对perl模块,然后使用yum install xxx进行安装。

答案 20 :(得分:1)

在具有Perl的ActiveState分发的Windows上,使用ppm命令。

答案 21 :(得分:1)

只需在shell上执行cpan Foo::Bar即可达到目的。

答案 22 :(得分: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";
    }
}

这对我很有用,也许你可以使用这里的东西。

答案 23 :(得分:1)

安全解决方案

许多答案都提到了cpan实用程序(使用CPAN.pm)的使用,但没有提及安全性。默认情况下,CPAN 2.27和更早版本将urllist配置为使用http URL(即http://www.cpan.org/),该URL允许MITM攻击,因此是不安全的。这就是用于下载CHECKSUMS文件的过程,因此需要将其更改为安全的URL(例如https://www.cpan.org/)。

因此,在运行cpan并接受默认配置之后,您需要按以下方式修改生成的MyConfig.pm文件(输出完整路径)。替换

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

作者

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

注意:https还不够;您还需要一个可以信任的网站。因此,如果要选择任意镜子,请小心。

然后,您可以按照常规方式使用cpan

我在rt.cpan.org上的bug report关于不安全的网址。