it-swarm.cn

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

我收到此错误:

Can't locate Foo.pm in @INC

有没有比下载,解决,制作等更容易安装它的方法?

164
dreeves

在Unix上

通常你在你的Shell中启动cpan

# cpan

并输入

install Chocolate::Belgian

或者简短形式:

cpan Chocolate::Belgian

在Windows上

如果您在Windows上使用ActivePerl,则 PPM(Perl软件包管理器) 具有与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,有一个名为g-cpan的Nice工具,它从CPAN构建/安装模块并为您创建一个Gentoo包( ebuild )。

201
Benedikt Waldvogel

试试 App :: cpanminus

# cpanm Chocolate::Belgian

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

# cpan App::cpanminus

安装它。

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

curl -L http://cpanmin.us | Perl - --Sudo App::cpanminus

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

60
Philip Potter

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

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

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

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

28
Dave Rolsky

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

 $ apt-cache search Perl geo :: ipfree 
 libgeo-ipfree-Perl  - 查找ip地址的国家/地区Perl模块
 
 $ Sudo apt-get安装libgeo-ipfree-Perl 
22
Otto

有几个人提到了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.
15
brian d foy

Sudo Perl -MCPAN -e 'install Foo'

11
dreeves

另见 是的,即使你可以使用CPAN 。它显示了如何在没有root或Sudo访问权限的情况下使用CPAN。

10
Corion

奥托做了 好建议 。这也适用于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
mikegrb

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

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

curl -L http://cpanmin.us | Perl - --Sudo App::cpanminus

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

之后 - 简单地说:

cpanm Foo
cpanm Module::One
cpanm Another::Module
7
jm666

CPAN.pm有很多建议,这很好,但如果你正在使用Perl 5.10那么你也可以访问CPANPLUS.pm,就像CPAN.pm但更好。

当然,对于仍在使用旧版本Perl的人来说,它可以在CPAN上使用。为什么不尝试:

$ cpan CPANPLUS
6
Dave Cross

很多时候它确实发生了cpan install命令失败的消息,如 “make test已经返回错误状态,不会没有强制安装”

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

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

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

要在一个命令提示符下安装Foo::Bar,例如通常你只需:

Sudo apt-get install libfoo-bar-Perl

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

4
Myforwik

即使它应该工作:

cpan -i module_name
4
Mandar Pande

使用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
4
Chankey Pathak

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

Perl_MM_USE_DEFAULT=1 Perl -MCPAN -e 'install DateTime::TimeZone'

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

b)它是一个Shell在线版,适用于安装脚本

3
Mister X

我知道的两种方式:

使用PPM:

使用 Windows (ActivePerl)我使用了ppm

从命令行类型ppm。在ppm提示...

ppm> install foo

要么

ppm> search foo

获取可用的foo模块列表。输入 help 表示所有命令

使用CPAN:

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

Perl -MCPAN -e 'Shell'

给你一个提示

cpan>

在提示......

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

键入h以获取cpan的命令列表

3
JWHEAT

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

yum install 'Perl(Chocolate::Belgian)'

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

3
Michal Ingeli

在Fedora上你可以使用

# yum install foo

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

3
Bruce Alderman

如果要将新模块放入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
2
venkrao

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

2
Chris Forever

好像你已经得到了你的答案,但我想我会插话。这就是我在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([email protected]){
        system("cpanm $x");
        eval "use $x";
    }
}

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

1
Ed Dunn

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

1
PW.

简单地在Shell上执行cpan Foo::Bar就可以达到目的。

1
Kamal Nayan